手把手教你落地 DDD
钟敬
Thoughtworks 首席咨询师、数字化转型与运营团队 DDD 负责人
19697 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 45 讲
AIGC特别策划 (2讲)
结束语&结课测试 (2讲)
手把手教你落地 DDD
15
15
1.0x
00:00/00:00
登录|注册

27|迭代三概述:怎样处理规模更大的系统?

你好,我是钟敬。
通过前两个迭代的学习,对于一个开发组范围内的项目,我们应该可以从容应对了。不过随着项目范围变大,逻辑变得更加复杂,还会引出新的挑战,这时候又要如何应对呢?
在接下来的第三个迭代中,我们会结合“卷卷通”公司的新需求进一步思考和实战,深化 DDD 的相关技能,解决这些问题。

迭代二回顾

我们先复习一下迭代二的知识,然后再了解迭代三的内容和需求。
在第二个迭代,我们主要讲了聚合、值对象、限定和泛化,同时补充了一些必要的 UML 知识。我把迭代一和迭代二的主要模式和实践,合并成下面这张概念图。
橙色的椭圆代表《领域驱动设计》原书中的模式。黄色椭圆表示在书里提过,但没有算作模式的知识点。另外,我把代表迭代二内容的图标放大了一点,这样更加醒目,方便你识别。

聚合

聚合(aggregate)是一组有整体部分关系,并且要满足一定不变规则的领域对象,其中只有一个实体表示整体,这个实体叫做聚合根。
聚合的整体与部分是强关联的,也就是一旦聚合根被删除,其他部分必然也被删除。由于这种强关系,所以外界只能通过聚合根来访问非根对象,因此,只有聚合根有业务意义上的全局标识,非聚合根实体只有局部标识。
对于那些单独存在,而不属于其他聚合的实体,可以认为是只有聚合根的、退化的聚合。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文总结了迭代三的内容,主要包括限界上下文、CQRS和分析模式初探。首先介绍了限界上下文的概念和作用,指出其在大型系统中的重要性,以及如何通过建模、架构设计和代码实现层面来理解和应用限界上下文。其次,讲解了CQRS架构模式,强调了其与DDD的配合以及解决查询功能的优势。最后,提到了分析模式的重要性,通过实例带领读者理解分析模式如何发挥作用,为进一步深入学习奠定基础。整体而言,本文聚焦于如何处理规模更大的系统,通过介绍这些技术和概念,帮助读者更好地理解和应对系统开发中的挑战。文章还提到了迭代三的挑战和需求,包括团队规模扩大、系统变得不易理解、沟通成本升高、系统缺陷增加等问题,以及新的业务需求,如人员和组织管理、工时管理等。这些内容为读者提供了对大型系统开发中可能遇到的挑战和需求的深入了解,为实践中的应用提供了有益的指导和启发。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手教你落地 DDD》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • 子衿
    2. 已经实战过,困难一:目前案例中,都是应用服务和聚合下的领域服务,一一对应,比如EmpService中,只会调用EmpHandler,不会调用OrgHandler,如果一个应用服务下,既需要聚合A的领域服务的功能,又需要聚合B下的领域服务的功能,那么是应该新应用服务中组合A领域服务和B领域服务,还是新应用服务下组合A应用服务和B应用服务,如果应用服务EmpService下想使用Org中的服务,那么是组合OrgHandler还是OrgService,困难二:如果领域服务OrgHandler中想使用EmpHandler的功能,可以直接在OrgHandler中组合EmpHandler么,困难三:下层肯定是不能依赖上层,但同层间是否可以互相依赖,这会不会产生什么问题,最佳实践是什么样的

    作者回复: 困难一:两种用法都有,关键还是分清什么逻辑应该放在应用层,什么逻辑应该放在领域层。这个问题分清了,答案自然就有了。一句话:要和不懂开发的业务人员讨论的逻辑,就是领域逻辑,放在领域层;否则放在应用层。 困难二:可以。 困难三:从松耦合的角度,尽量不互相依赖,但是原则上没有不让依赖的限制,实在要依赖的话也可以。

    2023-02-11归属地:上海
    4
    8
  • 子衿
    再补充几点:一:DDD中涉及到反腐层,反腐层的最佳实践是什么样的,在领域层定义一个接口,适配器层对其实现,然后在实现中发起远程调用访问外部,但如果领域层这个接口中,也要有领域逻辑呢,是退化成抽象类吗 二:不同模块下的类互相调用,和同一模块不同包下的类互相调用,应该怎么处理,方案是一致的吗,应用服务层的服务间互相调用和领域服务层的服务间互相调用,逻辑是一样的吗,同一个包下多个领域服务间互相调用,和不同包下多个领域服务间互相调用,逻辑是一样的吗

    作者回复: 一:抽象类是一种可行的方法,这是“继承”的思路;另一种是“组合”的思路,也就是有一个仅仅用于远程访问的接口,它的实现在适配器,把您说的领域逻辑放在另一个单独的领域服务,这个领域服务调用刚才的远程访问接口。一般来说,组合优于继承。 二:模块就是包的另一种说法,不太理解您说的“模块下的包”是什么意思。另外,您问了几个“逻辑是一样的吗?”,这里不知您说的“一样”具体是什么含义,所以无法回答。最好还是拿实际例子来谈。

    2023-02-11归属地:上海
    2
    3
  • kkxue
    老师,为什么你司CTO徐昊说CQRS是邪教呢?哈哈。

    作者回复: 这。。。您最好问他

    2023-02-13归属地:广东
    3
    2
  • 神经蛙
    想问下子域里面的通用域是指什么?为什么书中说通用域不可以被复用?那他为什么叫通用域呢?能举个实际例子讲讲核心域 支撑域 通用域吗 主要是通用域

    作者回复: “通用”指的是概念上的通用。“复用”指的是代码上的复用。不在同一个层面。通用域的例子,书里举了组织结构图和会计,另外,我认为工作流引擎也算。

    2023-03-03归属地:广东
  •  
    请问一下文档里绘图的工具是什么?打算在工作中试用下ddd,但是找不到好的画图工具

    编辑回复: draw.io

    2023-02-12归属地:广东
    2
  • aoe
    「限界上下文是化解大型系统的利器,也是架构设计的基础」 这个基础知识我才知道,离架构设计近了一步
    2023-02-27归属地:浙江
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部