DDD中的一些基础概念 观点摘录

系统复杂度来源于哪?也就是DDD存在意义

软件系统的复杂性主要体现在三个方面。

  • 隐晦:一是抽象层面的隐晦,抽象系统时,每个人都有自己特定的视角,你需要站在对方的角度才能明白他为什么这么做;其次是实现层面的隐晦,代码是一种技术实现,通常与现实世界的业务概念脱节,无形中增加了理解成本。
  • 耦合:代码层面的耦合扩大了修改范围;模块层面的耦合需要跨模块/服务交互;系统层面的耦合则需要跨团队协作。从代码到模块再到系统,耦合的影响逐渐扩大,成本随之增加。
  • 变化:业务需求决定了系统功能,不同的用户需求不一样,不同的业务发展阶段需求在不断变化,系统功能要随着业务需求的变化不断调整,这时就涉及到系统改动的频次和范围。

涉众域、问题域、解决方案域

  1. 基于涉众域拆解:也就是按用户相关性进行拆解,不同的用户使用不同的系统功能,如:CRM由市场人员、销售人员、客服人员三类角色协同完成客户触达,签约合作,售后服务三大职能,针对这三个角色建设相应的系统能力。这种拆解方式比较简单,但也存在较大的局限性,可能导致功能的重复建设。
  2. 基于问题域拆解:不同角色/用户要解决的问题是相同/相似的,可基于问题域进行拆解,如营销系统的用户包括销售、商户、销运等角色,但它核心是要解决如何发券(活动),发给谁(人群),发什么(权益)的问题。基于问题域的拆解相较于基于涉众域的拆解更加抽象,但也可能复用性不够。
  3. 基于解决方案域拆解:不同的问题,可能有相同的解决方案,如HR域有请假审批、财务上有报销流程、CRM领域存在客户资质审批,三个领域各自需要解决审批流程的问题,可以构建通用的审批流引擎来统一解决,这是基于解决方案域进行拆解。基于解决方案域的拆解最抽象,也最贴合业务本质,但也容易陷入过度设计的陷阱。

防腐层 (ACL, Anti-corruption layer)

防腐层(Anti-corruption Layer):一个上下文通过一些适配和转换与另一个上下文交互。

防腐层是一种在不同应用间转换的机制。创建一个防腐层,以根据客户端自己的领域模型为客户提供功能。该层通过其现有接口与另一个系统进行通信,几乎不需要对其进行任何修改。

在不共享相同领域模型的不同子系统之间实施防腐层(或外观或适配器层),此层转换一个子系统向另一个子系统发出的请求。 使用反腐层(Anti-corruption layer)模式可确保应用程序的设计不受限于对外部子系统的依赖。 反腐层(Anti-corruption layer)模式最先由 Eric Evans 在 Domain-Driven Design(域驱动的设计)中描述。

DDD领域驱动设计架构模式:防腐层(Anti-corruption layer) - Rickie - 博客园

贫血模型和充血模型


DDD中的贫血模型和充血模型都是领域模型的表现形式,但是它们在设计和实现上有着显著的区别。

- 贫血模型(Anemic Domain Model)是面向过程编程的一种表现形式。贫血模型的实体只包含数据属性和对应的 getter 以及 setter,而具体的业务逻辑交由服务层或其他外部组件负责。贫血模型将数据与操作分离,其好处是模型足够简单,开发上手比较快。团队内多人协作时,设计不容易变形。比较适合轻量级应用。但坏处是贫血模型的实体无法直接体现对应的业务能力,在复杂业务中,梳理业务逻辑将变得非常困难,不利于项目后期的业务演进。(**贫血领域对象(Anemic Domain Object)是指仅用作数据载体,而没有行为和动作的领域对象**)

- 充血模型(Rich Domain Model)则是面向对象编程的一种表现形式。充血模型的实体通常包含了数据属性以及引起属性发生变化的核心业务动作。充血模型将数据与业务能力绑定在一起,非常符合业务人员的思考方式,因此其好处是对业务非常友好,有助于更好的封装和保护领域内部的业务规则,尤其适合业务复杂的应用场景。充血模型的坏处是对业务的熟悉程度要求很高,需要在上手之初就设计好针对不同的业务场景,设计好具体的模型实体,并且规划好需要暴露哪些操作,定义哪些业务逻辑。而这些在贫血模型中则不需要,可以边实现边修改。

总的来说,贫血模型更注重简单性和易上手,而充血模型更注重业务复杂的系统开发。选择使用哪种模型取决于具体的业务需求和开发团队的技术能力。

https://blog.csdn.net/wei_7396/article/details/137372885


推荐文档: 
美团的DDD系列分享:

领域驱动设计DDD在B端营销系统的实践icon-default.png?t=O83Ahttps://tech.meituan.com/2024/05/27/ddd-in-business.html

领域驱动设计在互联网业务开发中的实践icon-default.png?t=O83Ahttps://tech.meituan.com/2017/12/22/ddd-in-practice.html

设计模式在外卖营销业务中的实践icon-default.png?t=O83Ahttps://tech.meituan.com/2020/03/19/design-pattern-practice-in-marketing.html

一些基础文献

Eric Evans.领域驱动设计.赵俐 盛海艳 刘霞等译.人民邮电出版社,2016. Vaughn Vernon.实现领域驱动设计.滕云译.电子工业出版社,2014.

 

  • [1]《解构领域驱动设计》– 张逸
  • [2]《领域驱动设计-软件核心复杂性应对之道》– Eric Evans
  • [3]《领域驱动设计模式、原理与实践》– Scott Millett, Nick Tune
  • [4]《Business Model Generation》– Alexander Osterwalder
  • [1] 《DDD 实战课》 欧创新
  • [2] 《领域驱动设计》 Eric Evans
  • [3] 《企业应用架构模式》 Martin Fowler
  • [4]《实现领域驱动设计》Vaughn Vernon
  • [5] 《The Clean Architecture》Robert C. Martin
  • [6] 《The Onion Architecture》 Jeffrey Palermo
  • [7] What is software complexity and how can you manage it? | The Man in the Arena
  • [8] Bounded Context

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

统信UOS开发环境支持shell

内置了Bash等流行的Shell环境,用户可编写自动化脚本,极大地提高了系统管理和应用开发效率。 文章目录 一、环境部署1. shell开发环境安装2. shell开发环境配置二、代码示例shell开发案例三、常见问题1. 文件处理2. 错误处理3. 跨平台兼容性一、环境部署 1. shell开发环境安装…

使用compare做简单的点云滤波,并另存为文件

一、打开compare软件后,打开一个pcd文件 二、点击显示的pcd文件对象,出现如图黄色框框 三、点击上边的菜单栏的这个标志 四、出现如下图,此时调整红绿蓝就可以简单的做一下背景的滤波操作 五、我调整蓝色按钮后将背景点云去除,点…

布谷语音源码服务器搭建环境及配置流程

布谷语音源码部署环境安装要求(只有在相同的环境下才更容易避免一些不必要的麻烦):●安装Center OS 7.9,我们自己的服务器使用的是7.9建议相同系统,非强制●安装宝塔环境(强烈推荐使用)●安装软…

奥数与C++小学四年级(第二十题 猜猜看)

参考程序代码&#xff1a; #include <iostream> using namespace std;int main() {// 集合 {1, 2, 3, 4, 5, 6, 7, 8}int set[] {1, 2, 3, 4, 5, 6, 7, 8};// 枚举所有可能的 5 个数for (int i 0; i < 8; i) {for (int j i 1; j < 8; j) {for (int k j 1; k…

关于游戏加加不可以在cs2中显示的解决方案

输入的代码如下 -allow_third_party_software 1.打开steam 右键cs2&#xff0c;打开属性。 然后再这里填上这个代码就可以了

QGIS:HCMGIS插件

插件GitHub地址&#xff1a;https://github.com/thangqd/HCMGIS。 以下对HCMGIS插件进行简单介绍&#xff0c;并演示如何进行地图数据下载。 插件简介 HCMGIS - Basemaps, Download OpenData, Batch Converter, VN-2000 Projections, and Field Calculation Utilities for QGI…

康姿百德典雅床垫功效价格双佳,上班族睡眠升级的秘密武器

卓越支撑&#xff0c;透气之选 —— 康姿百德集团公司典雅床垫引领睡眠新风尚 选择一款优质的床垫对于确保良好的睡眠至关重要&#xff0c;尤其是对于每日辛勤工作的上班族而言。一天结束后&#xff0c;躺在舒适的床垫上&#xff0c;享受深度睡眠的美好体验&#xff0c;是最放…

103 - Lecture 3

SQL - Table and Data Part 2 一、Table Constraints Table constraints can be defined when creating tables. But you can also add constraints to an existing table. 1. Syntax of Constraints • General Syntax: CONSTRAINT name TYPE details; • 约束名称是为了以后…

前端 算法 双指针

文章目录 三数之和移动零盛最多水的容器接雨水 三数之和 leetcode 三数之和 题目链接 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有…

nuPlan最新SOTA,香港科技大学发布基于学习决策范围内的规划PlanScope

nuPlan最新SOTA&#xff0c;香港科技大学发布基于学习决策范围内的规划PlanScope Abstract 在自动驾驶的背景下&#xff0c;基于学习的方法在规划模块的开发中表现出了很大的潜力。在规划模块的训练过程中&#xff0c;直接最小化专家驾驶日志与规划输出之间的差异是一种广泛采…

MATLAB实现人工免疫网络算法(Artificial Immune Network Algorithm, AINA)

1. 免疫网络算法简介 生物免疫系统是自然界中最复杂、最有效的自适应系统之一&#xff0c;它能够识别并清除入侵的病原体&#xff0c;同时保持对自身细胞的忍耐。免疫网络算法是一种借鉴生物免疫系统原理和机制的计算模型 2.算法流程 3.MATLAB代码 完整代码见: https://down…

MySQL初学之旅(1)配置与基础操作

目录 1.前言 2.正文 2.1数据库的发展历程 2.2数据库的基础操作 2.2.1启动服务 2.2.2创建与删除数据库 2.2.3数据类型 2.2.4创建表与删除表 2.3MySQL Workbench基础使用简介 3.小结 1.前言 哈喽大家好吖&#xff0c;今天博主正式开始为大家分享数据库的学习&#xff…

【优选算法】——滑动窗口(下篇)!

目录 1、水果成篮 2、找到字符串中所有字母异位词 3、串联所有单词的子串 4、最小覆盖子串 1、水果成篮 你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示&#xff0c;其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能…

【Python】heapq模块(操作最小堆,主要用途优先队列)

Python中heapq模块被称为堆队列算法&#xff0c;也成为优先队列算法。堆的主要用途是优先队列和堆排序。 堆&#xff08;二叉树的应用&#xff09;&#xff1a;最小堆&#xff0c;最大堆。 最小堆&#xff1a;父节点小于等于所有子节点&#xff0c;左右子节点无大小要求&…

MFC图形函数学习06——画椭圆弧线函数

绘制椭圆弧线函数是MFC基本绘图函数&#xff0c;这个函数需要的参数比较多&#xff0c;共四对坐标点。前两对坐标点确定椭圆的位置与大小&#xff0c;后两对坐标确定椭圆弧线的起点与终点。 一、绘制椭圆弧线函数 原型&#xff1a;BOOL Arc(int x1,int y1,int x2,int y2…

Nuxt 项目安装时报错 fetch failed (详细)

报错: ERROR Error: Failed to download template from registry: Failed to download https://raw.githubusercontent.com/nuxt/starter/templates/templates/v3.json: TypeError: fetch failed. 报错原因: 对 raw.githubusercontent.com 进行了 DNS 污染,这会导致你的请…

autox.js下载并保存项目到设备使用

最近刷快手极速版薅羊毛&#xff0c;手动刷有点累。因此找到这个。 PS&#xff1a;更多内容请见官方文档&#xff1a;首页 (autoxjs.com) 1.下载工程化环境&#xff1a;https://github.com/kkevsekk1/AutoX/archive/refs/heads/dev-test.zip 手机软件下载软件&#xff1a;Relea…

ssm+vue680基于SSM的旅游论坛设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…

盘点2024年制造业数字化转型的6大发展趋势

​目前制造业的行业数字化发展存在以下几个趋势&#xff1a; 1、从“增量时代”进入“存量时代”&#xff0c;数字化转型成为行业共识 过去几十年&#xff0c;我国装备制造行业从无到有&#xff0c;从小到大&#xff0c;从指数增长的增量时代&#xff0c;进入优化升级的存量时…

安科瑞Acrel-2000ES储能柜能量管理系统的详细介绍-安科瑞 蒋静

Acrel-2000ES储能柜能量管理系统具备全面的储能监控和管理功能。它包括了储能系统设备&#xff08;如PCS、BMS、电表、消防、空调等&#xff09;的详细信息&#xff0c;并实现了数据采集、处理、存储、数据查询与分析、可视化监控、报警管理和统计报表等功能。此外&#xff0c;…