DDD实战课
欧创新
人保高级架构师
立即订阅
5243 人已学习
课程目录
已完结 24 讲
0/2登录后,你可以任选2讲全文学习。
开篇词 (1讲)
开篇词 | 学好了DDD,你能做什么?
免费
基础篇 (5讲)
01 | 领域驱动设计:微服务设计为什么要选择DDD?
02 | 领域、子域、核心域、通用域和支撑域:傻傻分不清?
03 | 限界上下文:定义领域边界的利器
04 | 实体和值对象:从领域模型的基础单元看系统设计
05 | 聚合和聚合根:怎样设计聚合?
进阶篇 (6讲)
06 | 领域事件:解耦微服务的关键
07 | DDD分层架构:有效降低层与层之间的依赖
08 | 微服务架构模型:几种常见模型的对比和分析
09 | 中台:数字转型后到底应该共享什么?
10 | DDD、中台和微服务:它们是如何协作的?
答疑:有关3个典型问题的讲解
实战篇 (10讲)
11 | DDD实践:如何用DDD重构中台业务模型?
12 | 领域建模:如何用事件风暴构建领域模型?
13 | 代码模型(上):如何使用DDD设计微服务代码模型?
14 | 代码模型(下):如何保证领域模型与代码模型的一致性?
15 | 边界:微服务的各种边界在架构演进中的作用?
16 | 视图:如何实现服务和数据在微服务各层的协作?
17 | 从后端到前端:微服务后,前端如何设计?
18 | 知识点串讲:基于DDD的微服务设计实例
19 | 总结(一):微服务设计和拆分要坚持哪些原则?
20 | 总结(二):分布式架构关键设计10问
结束语 (1讲)
结束语 | 所谓高手,就是跨过坑和大海!
专栏加餐 (1讲)
基于DDD的微服务设计实例代码详解
DDD实战课
登录|注册

基于DDD的微服务设计实例代码详解

欧创新 2020-01-02
你好,我是欧创新。好久不见,今天我带着你期待的案例来了。
还记得我们在 [第 18 讲] 中用事件风暴完成的“在线请假考勤”项目的领域建模和微服务设计吗?今天我们就在这个项目的基础上看看,用 DDD 方法设计和开发出来的微服务代码到底是什么样的?点击 Github 获取完整代码,接下来的内容是我对代码的一个详解,期待能帮助你更好地实践我们这个专栏所学到的知识。

项目回顾

“在线请假考勤”项目中,请假的核心业务流程是:请假人填写请假单提交审批;根据请假人身份、请假类型和请假天数进行校验并确定审批规则;根据审批规则确定审批人,逐级提交上级审批,逐级核批通过则完成审批,否则审批不通过则退回申请人。
[第 18 讲] 的微服务设计中,我们已经拆分出了两个微服务:请假和考勤微服务。今天我们就围绕“请假微服务”来进行代码详解。微服务采用的开发语言和数据库分别是:Java、Spring boot 和 PostgreSQL。

请假微服务采用的 DDD 设计思想

请假微服务中用到了很多的 DDD 设计思想和方法,主要包括以下几个:

聚合中的对象

请假微服务包含请假(leave)、人员(person)和审批规则(rule)三个聚合。leave 聚合完成请假申请和审核核心逻辑;person 聚合管理人员信息和上下级关系;rule 是一个单实体聚合,提供请假审批规则查询。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《DDD实战课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(15)

  • Miss 置顶
    偶是编辑,这篇加餐比较长~作者会抽周末的时间把音频讲解为大家补上。感谢等待!
    2020-01-02
    2
  • 阿玛铭
    欧老师的回马枪猝不及防

    作者回复: 😄,舍不得跟大家告别。

    2020-01-02
    2
  • 盲僧
    太棒了,这个案例太精彩
    2020-01-03
    1
  • zj
    这篇文章刚下班,还没来得及看,等会下班到家再一饱眼福。
    2020-01-02
    1
  • 陈四丰
    感谢欧老师的加餐,受益匪浅。

    实际操作中,我产生了一个疑问。是不是每个微服务都要有自己单独的数据库?比如本节案例:“请假”和“考勤”是两个微服务,那么就应该有两个独立的数据库去对应。(database: leave和checking)?

    多谢指教!!!
    2020-01-05
  • hk
    老师你好,问个小白问题:创表SQL需要我们自己生成出来是么?

    作者回复: 看你用什么样的持久化组件。有的可以根据PO自动创建。

    2020-01-03
  • zj
    老师为什么我看代码里面Leave这个实体类没采用直接依赖仓储层的方式呢

    作者回复: 因为聚合数据要作为整体来修改和创建,持久化的工作统一放到工厂服务里去实现了。

    2020-01-03
  • sqyao
    期待已久的ddd demo项目终于出炉了,感谢欧老师!😄

    作者回复: 😄,久等了。

    2020-01-03
  • 陈华应
    感谢老师的长篇分享,对其中一句深表赞同,不自觉的调用其他聚合的东西,不自觉有两种,一种是老师说的图一时快,另一种比较难受,就是不知道ddd或者固执己见,达不成一致,统一思想开发风格很重要!

    作者回复: 是的,DDD不是一个人的事情。

    2020-01-02
  • 观弈道人
    终于等到了,谢谢大佬。
    2020-01-02
  • 和光同尘
    请问数据对账机制,是如何知道有数据缺损,不一致的?再者,发现不一致的数据如何纠正。3Q

    作者回复: 可以基于源端持久化和目的端持久化数据来比对,发现异常数据。处理方式有很多,发现问题后可以重传或者人工处理。

    2020-01-02
  • Jxin
    1.感谢栏主的demo。劳烦了。

    2.毕竟是用于大概了解ddd的demo,各中实现比较简单,并没有很讲究设计原则。如果有下一个专栏再探讨。

    3.认真看完栏主代码实现,跟自己的实现规范差别还是挺多的。各有利弊就不多赘述了。

    4.期待下次相见。

    作者回复: DDD的主要目标是为了边界划分和解耦,而实现这个目标有很多的手段。目标只有一个,而手段会有很多个,只要能达到这个目标,可以选择适合自己的手段,咱们的主要区别可能在手段上有差异。
    有机会向你学习哈。

    2020-01-02
    1
  • 深山小书童
    终于等到了,欧老师威武
    2020-01-02
  • 二康
    谢谢老师
    2020-01-02
  • 阿神
    代码简洁易懂,很赞

    作者回复: 谢谢😄

    2020-01-02
收起评论
15
返回
顶部