领域驱动设计(DDD)笔记(三)后端工程架构

文章链接

  1. 领域驱动设计(DDD)笔记(一)基本概念-CSDN博客
  2. 领域驱动设计(DDD)笔记(二)代码组织原则-CSDN博客
  3. 领域驱动设计(DDD)笔记(三)后端工程架构-CSDN博客

前导

领域驱动设计(Domain Driven Design,简称DDD)是业内主导的业务工程理论。它在各中权威人士被广泛讨论,但实际落地的具体实践缺相对较少。有人认为DDD是一个听起来高深,缺缺乏实践指导,在各大佬口中被广泛提及但是很少有下场谈具体实现的。DDD是一种听起来高大上,谈起来空洞的方法论,这里我基于代码工程角度抛砖引玉,整理出我的认识。本次我使用GO语言作为工程目录参考,后续会补充Java

DDD 是一种方法论,是“分治”思想的更详细的描述,将一个复杂的系统拆分成一个个尽可能垂直正交的小问题域,让每个问题各自约束自己的职责,从而实现整体框架的简洁清晰。DDD 本质还是遵循高内聚、低耦合的设计原则;根SOLID原则遥相呼应。DDD的战略设计是站在一个更高更抽象的角度拆分问题,战术设计原则是指导具体的落地实现细节。如果对DDD接触不深的话可以参考DDD理论基础。下面简单列一下常见的工程代码的设计方法和特点。

设计方法 出发点 关注点 模型 所处层 技术方案 使用场景
数据驱动设计 从数据存储方案出发 怎么存 实体关系建模,贫血模型,只有数据 基础设施层 根据存储方案密关联 简单的业务场景CRUD
服务驱动设计 从服务提供的资源和行为能力出发 提供什么服务 接口对象建模,贫血模型,只有数据 应用层 不关注实体实现方案 简单的业务场景,API服务
领域驱动设计 一切围绕着领域知识进行建模 领域划分和建模 领域对象建模,充血模型,包括数据和方法 领域层 不考虑存储方式(技术实现) 复杂业务场景

数据驱动设计,采用的是事物脚步的写法,这种写法适合简单、初期项目;随着业务迭代复杂会出现逻辑散乱、职责不清、重复代码、无法单测等诸多问题,常常会出现改漏导致的Bug或事故。

工程代码结构

工程代码按照clean arch 架构来进行分层,如下图

分层概述

Domain是践行面向对象编程,为当前类(go是结构体)负责,按照对象能力方式组织代码。

UseCase是面向过程的编程,为场景能力负责,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/591197.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode_43.字符串相乘

43. 字符串相乘 题目描述:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 &q…

好用的AI工具推荐与案例分析

你用过最好用的AI工具有哪些? 简介:探讨人们在使用AI工具时,最喜欢的和认为最好用的工具是哪些,展示AI技术的实际应用和影响。 方向一:常用AI工具 在选择常用AI工具时,可以根据不同的应用场景和需求来挑选…

【1小时掌握速通深度学习面试3】RNN循环神经网络

目录 12.描述循环神经网络的结构及参数更新方式,如何使用神经网络对序列数据建模? 13.循环神经网络为什么容易出现长期依赖问题? 14.LSTM 是如何实现长短期记忆功能的? 15.在循环神经网络中如何使用 Dropout ? 16.如何用循环神经网络实现 Seg2Seq 映射? …

手撕vector的模拟实现

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

Vitis HLS 学习笔记--HLS眼中的完美循环嵌套

目录 1. 简介 2. 示例 2.1 不完美循环 2.2 完美循环 2.3 HLS 眼中的循环 3. 总结 1. 简介 在处理嵌套循环时(HDL或HLS工具中),优化循环结构对于实现最佳性能至关重要。嵌套循环的性能优化直接影响着计算的时延和资源利用率。创建完美嵌…

光头强:IBM收购HashCorp (Terraform)有多大意义?

StrongBear公司在光头强强总以及合伙人熊大熊二的艰苦努力下,最近公司进了一次扩容。甚至将原来一些甲方的研发人员也拉入旗下,其中就包括与熊二共事多年的小玲子以及小强同学。 光头强也注意到最近在IT软件领域,频频发生一些并购事件。比如…

SAP_SD模块-销售批次策略应用记录

一、销售批次查找策略的重要性 批次查找策略允许企业在销售过程中根据预定义的规则自动选择最适合的产品批次。这种策略的实施,对企业尤其是那些涉及到严格产品质量与安全标准的行业(如食品、药品及化工产品)具有以下几方面的重要意义&#x…

不尝试一下?计算机领域两大赛事来了!!

前言 最近,熊二新来的同事小强比较关注国内的一些赛事信息。这不,近期有两大赛事。这两大赛事,主要还是面向高校学生的。一个是搞网络安全方向的: 第二届京麒CTF挑战赛,另一个是搞数据库方向的: 2024年全国大学生计算机系统能力大…

【大数据】学习笔记

文章目录 [toc]NAT配置IP配置SecureCRT配置PropertiesTerminal Java安装环境变量配置 Hadoop安装修改配置文件hadoop-env.shyarn-env.shslavescore-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml 环境变量配置 IP与主机名映射关系配置hostname配置映射关系配置 关闭防火墙…

基于Springboot的校运会管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的校运会管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&a…

第2章 WebServer进阶

2.1 使用多线程处理多用户请求 2.1.1 多线程Socket通信 在上一章的案例中,服务端显然只能处理一次浏览器请求,请求一次浏览器端就结束程序。如何解决这个问题呢?可以采用多线程Socket通信技术,解决多用户并发请求。 在多线程Sock…

十四、网络编程

目录 一、二、网络通讯要素三、IP和端口号四、网络协议1、网络通信协议2、TCP/IP协议簇1)TCP协议2)UDP 3、Socket 五、TCP网络编程1、基于Socket的TCP编程1)客户端创建socket对象2) 服务器端建立 ServerSocket对象 2、UDP网络通信…

理想二极管LM74700QDBVRQ1

LM74700QDBVRQ1 防反接专用芯片 器件手册 应用参考(下图是另外一个理想二极管应用电路图) 这两款芯片的区别主要是工作电压范围不同(实际应用是) 电源远端电压补偿-CSDN博客https://blog.csdn.net/anlog/article/details/1338627…

顶顶顶顶顶顶顶顶顶顶顶顶

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

SVM单类异常值检测

SVM是一种广泛使用的分类器,通常用于二分类或多分类问题。然而,在异常点检测的场景中,我们通常会将数据视为一个类别(即正常数据点),并尝试找到那些与正常数据点显著不同的点(即异常点&#xff…

jQuery的简单使用

jQuery的简单使用 jQuery查找父、子、兄弟节点jQuery查找内容元素筛选遍历元素操作元素width() / height() 设置宽高.css() 设值样式attr() / prop() 设置属性增加、删除、切换class删除和清空 操作元素总结选择表达式链式操作取值和赋值函数 HTML_1 <table id"table_…

利用大模型提升个性化推荐的异构知识融合方法

在推荐系统中&#xff0c;分析和挖掘用户行为是至关重要的&#xff0c;尤其是在美团外卖这样的平台上&#xff0c;用户行为表现出多样性&#xff0c;包括不同的行为主体&#xff08;如商家和产品&#xff09;、内容&#xff08;如曝光、点击和订单&#xff09;和场景&#xff0…

C++奇迹之旅:C++内存管理的机制(终篇)

文章目录 &#x1f4dd;malloc/free和new/delete的区别&#x1f6a8; 内存泄漏&#x1f3af;什么是内存泄漏&#xff0c;内存泄漏的危害 &#x1f3af;内存泄漏分类&#x1f3af;如何检测内存泄漏&#x1f3af;如何避免内存泄漏 &#x1f6a9;总结 &#x1f4dd;malloc/free和n…

[XYCTF新生赛]-PWN:guestbook1解析(程序自带栈迁移,off by one覆盖rbp一字节实现栈迁移)

查看保护 查看ida 这里可以覆盖rbp最后一个字节&#xff0c;而且程序会执行两次leave ret 完整exp&#xff1a; from pwn import* #pprocess(./guestbook) premote(gz.imxbt.cn,20073) backdoor0x00401328for i in range(33):p.sendlineafter(index,str(i))payloadp64(backdo…

多模态大语言模型和 Apple 的 MM1

原文地址&#xff1a;multimodal-large-language-models-apples-mm1 2024 年 4 月 13 日 抽象是计算机科学中最关键的概念之一&#xff0c;具有一些最强大的影响。从简单的角度来看&#xff0c;抽象就是将某一事物应用于多种不同情况的能力。例如&#xff0c;如果你创造了一种…
最新文章