18 | 知识点串讲:基于DDD的微服务设计实例
该思维导图由 AI 生成,仅供参考
项目基本信息
战略设计
1. 产品愿景
- 深入了解
- 翻译
- 解释
- 总结
基于领域驱动设计(DDD)的微服务设计实例,本文详细介绍了在线请假和考勤管理系统的战略设计和战术设计过程。战略设计阶段从产品愿景、场景分析到领域建模,全面展现了DDD设计流程和关键点。而战术设计阶段则重点讲解了分析微服务领域对象和设计微服务代码结构的过程,包括服务的识别和设计、聚合中的对象设计以及微服务内的对象清单。此外,文章还提到了后续的详细设计、代码开发和测试工作。通过这一实例,读者可以全面了解DDD的设计过程,为微服务开发和测试提供指导。整体而言,本文内容丰富,逻辑清晰,对于正在进行微服务设计的读者具有很高的参考价值。
《DDD 实战课》,新⼈⾸单¥59
全部留言(94)
- 最新
- 精选
- movesan从第一课看到这里,终于有了一些领域建模的一些理解,希望可以慢慢的打开这扇门。 战略设计阶段: 此阶段主要是依赖于事件风暴(可理解为基于事件流程的头脑风暴),来呈现出产品的发展方向以及核心流程和场景,并文档化。 1.产品要解决的问题,以及从用户角度归纳出典型业务场景,落实文档 -----> 产品愿景、场景分析 2.找出上一步总结出的关键名词,作为各个场景的实体 -----> 领域建模:找出领域对象 3.根据上一步总结出实体,总结出之间的关系(聚合根、值对象、普通实体),划分出聚合 -----> 领域建模:定义聚合 4.以上一步归纳出的聚合为单位,根据业务场景将聚合分组,得到限界上下文(也就是所属的领域) ----->领域建模:定义界限上下文 感觉在第 1 步落实文档后,后面的 2,3,4 领域建模阶段都要不断的参照第 1 步总结出的业务流程场景来进行拆解与合并; 产品愿景、场景分析 两个阶段是从宏观到微观的过程,而 领域建模阶段是从微观到宏观的过程,也就是自底向上的思想。整体就像是总分、分总的过程。 战术设计阶段: 有了战略设计阶段的结果,反而战术设计阶段相对清晰一些。 1.按照 DDD 四层模型建包 2.确定聚合中的对象关系 3.通过战略设计阶段文档中的命令、事件来编排充血模型的领域对象,构建应用服务与领域服务 以上是初识领域驱动设计自己的一些理解,感觉如果战略设计阶段清晰完整,后面的战术设计阶段(代码落实阶段)会相对更容易一些。
作者回复: 理解的很好。
2020-05-2334 - 盲僧新哥,把代码放到git上给兄弟们个地址吧
作者回复: 我需要时间整理一下哈,等好了再共享。
2019-11-25324 - Aries命令和事件那块感觉有些模糊,比如下单是命令还是事件呢? 按照我们的系统设计,下单则是事件。
作者回复: 下单是命令,订单已下单是事件。
2019-12-30416 - iMARS请教老师一个问题,在上述考勤系统中,在人员实体和组织关系实体之间,如何抉择人员是聚合根,而组织关系不是?或者说判断聚合根的依据是什么?谢谢
作者回复: 判断一个实体是否是聚合根,你可以结合以下内容进行分析。是否有独立的生命周期?是否有全局唯一 ID ?是否可以创建或修改其他对象?是否有专门的模块来管理这个实体等。 聚合根管理了聚合内所有实体和值对象的生命周期,我们通过聚合根就可以获取到聚合内所有实体和值对象等领域对象。一般来说,如果聚合根被删除了,那么被它引用的实体和值对象也就不会存在了。 这个场景是以人员关系管理为主,所以人员就成为了聚合根,而组织关系只是描述人员之间的关系,所以成为实体,被人员聚合根引用。
2020-10-12214 - zj我觉得老师可以讲一下CQRS,毕竟微服务好多都是要查询的哈哈
作者回复: CQRS其实就是读写分离,主要解决DDD的复杂查询问题。一般是写库和读库分离,但是实效性不容易保证。其实你也可以在同一个库,用领域或者应用查询服务来完成复杂查询的。
2019-12-0138 - Alex zhang老师,代码有github链接吗
作者回复: 本来没准备放代码的哈,我后面花时间整理一下吧。
2019-11-2536 - 风老师这篇文章对DDD的理解效果非常高,实际的案例分析过程有一种Ddd不再是飘在空中,有点落地的感觉了,谢谢老师👨🏫,真的很用心
作者回复: 感谢,掌握了DDD的设计思想和过程,相信微服务的拆分和设计不再是难事。
2020-11-105 - 古腪有个场景希望老师帮分析下,一个是用户可以有多个角色,一个角色有多个用户,并且有多个权限,一个是权限可能配置多个角色,这种情况要怎么设计聚合咧?
作者回复: 你看这样设计合适不?用户、角色和权限是三个不同的聚合,其实这三个聚合最关键的是用户聚合。角色和权限实际上属于配置类聚合。我们在完成用户的权限或者角色配置后,可以将角色和权限聚合相关的数据复制到用户聚合,作为用户聚合根的值对象。只要能够找到用户,就可以获取角色和权限的基本数据。
2020-05-2935 - Tan产品愿景可以不安上面的来吗? 我的理解就是 1、产品是为谁服务 2、解决了什么问题 3、给产品确定名称 4、给产品定义功能 5、竞品分析 6、本产品的优势
作者回复: 可以的啊,这只是一种手段。只要你们统一团队语言和目标,找到产品的核心价值点,多种方法都可以。
2019-12-243 - 大飞新哥,问个有点奇怪的问题,在设计过程中,对于一些复杂的流程细节没考虑到位,或者忽略了某个细节流程,而导致在程序落地过程中,发现原有的建模不够严谨,对于这种场景,有什么补救措施吗,或者如何避免这一问题的发生?
作者回复: 这个可能需要分一下几类情况来处理。 1、如果是聚合内实体的业务逻辑没考虑到,只需要修改对应实体内的属性或者方法即可。 2、如何是聚合内实体之间的关系没考虑到,调整或新增领域服务,或者聚合根的方法即可。 3、如果是在同一个限界上下文内的聚合之间的关系没考虑到,在应用层的应用服务中调整或新增即可。 4、如果是聚合划分到了错误的限界上下文内,整体将聚合内所有对象和代码调整到合适的限界上下文即可,并重新建立新的限界上下文内聚合之间的关系。
2020-09-302