DDD 实战课
欧创新
人保资深架构师
55517 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 26 讲
开篇词 (1讲)
DDD 实战课
15
15
1.0x
00:00/00:00
登录|注册

18 | 知识点串讲:基于DDD的微服务设计实例

领域层代码结构
应用层代码结构
识别服务、设计领域服务、设计实体基本属性和方法
服务的识别和设计
根据限界上下文拆分微服务
定义限界上下文
建立领域模型
从用户视角出发,探索业务领域中的典型场景
产品目标用户、核心价值、差异化竞争点
产品顶层价值设计
核销请假数据后,对考勤数据进行校验,输出考勤统计
逐级核批通过则完成审批,否则退回申请人
根据审批规则逐级递交上级审批
根据请假人身份、请假类型和请假天数进行校验
请假人填写请假单提交审批
难点痛点
需要特别注意的事项
微服务设计方法
战术设计
DDD战略设计
代码开发和测试
详细设计
设计微服务代码结构
分析微服务领域对象
微服务的拆分
领域建模
场景分析
产品愿景
考勤流程
请假流程
实现在线请假和考勤管理
思考题
总结
后续的工作
战术设计
战略设计
项目基本信息
知识点串讲:基于DDD的微服务设计实例

该思维导图由 AI 生成,仅供参考

你好,我是欧创新。
为了更好地理解 DDD 的设计流程,今天我会用一个项目来带你了解 DDD 的战略设计和战术设计,走一遍从领域建模到微服务设计的全过程,一起掌握 DDD 的主要设计流程和关键点。

项目基本信息

项目的目标是实现在线请假和考勤管理。功能描述如下:
请假人填写请假单提交审批,根据请假人身份、请假类型和请假天数进行校验,根据审批规则逐级递交上级审批,逐级核批通过则完成审批,否则审批不通过退回申请人。
根据考勤规则,核销请假数据后,对考勤数据进行校验,输出考勤统计。

战略设计

战略设计是根据用户旅程分析,找出领域对象和聚合根,对实体和值对象进行聚类组成聚合,划分限界上下文,建立领域模型的过程。
战略设计采用的方法是事件风暴,包括:产品愿景、场景分析、领域建模和微服务拆分等几个主要过程。
战略设计阶段建议参与人员:领域专家、业务需求方、产品经理、架构师、项目经理、开发经理和测试经理。

1. 产品愿景

产品愿景是对产品顶层价值设计,对产品目标用户、核心价值、差异化竞争点等信息达成一致,避免产品偏离方向。
事件风暴时,所有参与者针对每一个要点,在贴纸上写出自己的意见,贴到白板上。事件风暴主持者会对每个贴纸,讨论并对发散的意见进行收敛和统一,形成下面的产品愿景图。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

基于领域驱动设计(DDD)的微服务设计实例,本文详细介绍了在线请假和考勤管理系统的战略设计和战术设计过程。战略设计阶段从产品愿景、场景分析到领域建模,全面展现了DDD设计流程和关键点。而战术设计阶段则重点讲解了分析微服务领域对象和设计微服务代码结构的过程,包括服务的识别和设计、聚合中的对象设计以及微服务内的对象清单。此外,文章还提到了后续的详细设计、代码开发和测试工作。通过这一实例,读者可以全面了解DDD的设计过程,为微服务开发和测试提供指导。整体而言,本文内容丰富,逻辑清晰,对于正在进行微服务设计的读者具有很高的参考价值。

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

全部留言(94)

  • 最新
  • 精选
  • movesan
    从第一课看到这里,终于有了一些领域建模的一些理解,希望可以慢慢的打开这扇门。 战略设计阶段: 此阶段主要是依赖于事件风暴(可理解为基于事件流程的头脑风暴),来呈现出产品的发展方向以及核心流程和场景,并文档化。 1.产品要解决的问题,以及从用户角度归纳出典型业务场景,落实文档 -----> 产品愿景、场景分析 2.找出上一步总结出的关键名词,作为各个场景的实体 -----> 领域建模:找出领域对象 3.根据上一步总结出实体,总结出之间的关系(聚合根、值对象、普通实体),划分出聚合 -----> 领域建模:定义聚合 4.以上一步归纳出的聚合为单位,根据业务场景将聚合分组,得到限界上下文(也就是所属的领域) ----->领域建模:定义界限上下文 感觉在第 1 步落实文档后,后面的 2,3,4 领域建模阶段都要不断的参照第 1 步总结出的业务流程场景来进行拆解与合并; 产品愿景、场景分析 两个阶段是从宏观到微观的过程,而 领域建模阶段是从微观到宏观的过程,也就是自底向上的思想。整体就像是总分、分总的过程。 战术设计阶段: 有了战略设计阶段的结果,反而战术设计阶段相对清晰一些。 1.按照 DDD 四层模型建包 2.确定聚合中的对象关系 3.通过战略设计阶段文档中的命令、事件来编排充血模型的领域对象,构建应用服务与领域服务 以上是初识领域驱动设计自己的一些理解,感觉如果战略设计阶段清晰完整,后面的战术设计阶段(代码落实阶段)会相对更容易一些。

    作者回复: 理解的很好。

    2020-05-23
    34
  • 盲僧
    新哥,把代码放到git上给兄弟们个地址吧

    作者回复: 我需要时间整理一下哈,等好了再共享。

    2019-11-25
    3
    24
  • Aries
    命令和事件那块感觉有些模糊,比如下单是命令还是事件呢? 按照我们的系统设计,下单则是事件。

    作者回复: 下单是命令,订单已下单是事件。

    2019-12-30
    4
    16
  • iMARS
    请教老师一个问题,在上述考勤系统中,在人员实体和组织关系实体之间,如何抉择人员是聚合根,而组织关系不是?或者说判断聚合根的依据是什么?谢谢

    作者回复: 判断一个实体是否是聚合根,你可以结合以下内容进行分析。是否有独立的生命周期?是否有全局唯一 ID ?是否可以创建或修改其他对象?是否有专门的模块来管理这个实体等。 聚合根管理了聚合内所有实体和值对象的生命周期,我们通过聚合根就可以获取到聚合内所有实体和值对象等领域对象。一般来说,如果聚合根被删除了,那么被它引用的实体和值对象也就不会存在了。 这个场景是以人员关系管理为主,所以人员就成为了聚合根,而组织关系只是描述人员之间的关系,所以成为实体,被人员聚合根引用。

    2020-10-12
    2
    14
  • zj
    我觉得老师可以讲一下CQRS,毕竟微服务好多都是要查询的哈哈

    作者回复: CQRS其实就是读写分离,主要解决DDD的复杂查询问题。一般是写库和读库分离,但是实效性不容易保证。其实你也可以在同一个库,用领域或者应用查询服务来完成复杂查询的。

    2019-12-01
    3
    8
  • Alex zhang
    老师,代码有github链接吗

    作者回复: 本来没准备放代码的哈,我后面花时间整理一下吧。

    2019-11-25
    3
    6
  • 老师这篇文章对DDD的理解效果非常高,实际的案例分析过程有一种Ddd不再是飘在空中,有点落地的感觉了,谢谢老师👨‍🏫,真的很用心

    作者回复: 感谢,掌握了DDD的设计思想和过程,相信微服务的拆分和设计不再是难事。

    2020-11-10
    5
  • 古腪
    有个场景希望老师帮分析下,一个是用户可以有多个角色,一个角色有多个用户,并且有多个权限,一个是权限可能配置多个角色,这种情况要怎么设计聚合咧?

    作者回复: 你看这样设计合适不?用户、角色和权限是三个不同的聚合,其实这三个聚合最关键的是用户聚合。角色和权限实际上属于配置类聚合。我们在完成用户的权限或者角色配置后,可以将角色和权限聚合相关的数据复制到用户聚合,作为用户聚合根的值对象。只要能够找到用户,就可以获取角色和权限的基本数据。

    2020-05-29
    3
    5
  • Tan
    产品愿景可以不安上面的来吗? 我的理解就是 1、产品是为谁服务 2、解决了什么问题 3、给产品确定名称 4、给产品定义功能 5、竞品分析 6、本产品的优势

    作者回复: 可以的啊,这只是一种手段。只要你们统一团队语言和目标,找到产品的核心价值点,多种方法都可以。

    2019-12-24
    3
  • 大飞
    新哥,问个有点奇怪的问题,在设计过程中,对于一些复杂的流程细节没考虑到位,或者忽略了某个细节流程,而导致在程序落地过程中,发现原有的建模不够严谨,对于这种场景,有什么补救措施吗,或者如何避免这一问题的发生?

    作者回复: 这个可能需要分一下几类情况来处理。 1、如果是聚合内实体的业务逻辑没考虑到,只需要修改对应实体内的属性或者方法即可。 2、如何是聚合内实体之间的关系没考虑到,调整或新增领域服务,或者聚合根的方法即可。 3、如果是在同一个限界上下文内的聚合之间的关系没考虑到,在应用层的应用服务中调整或新增即可。 4、如果是聚合划分到了错误的限界上下文内,整体将聚合内所有对象和代码调整到合适的限界上下文即可,并重新建立新的限界上下文内聚合之间的关系。

    2020-09-30
    2
收起评论
大纲
固定大纲
项目基本信息
战略设计
1. 产品愿景
显示
设置
留言
94
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部