DDD初步了解

DDD:Domain Driven Design,领域驱动设计,随着微服务的流行,业务的快速发展(变化+复杂),团队的迅速膨胀,DDD也被越来越多的公司使用。

拆分领域模型,使用充血模式(与贫血模式相反,我们MVC模式中的model/DO/DTO,只包含属性和get、set方法,就是贫血模式);

各领域独立发展,领域间的交互,使用领域服务来实现;

封装变化;

实现功能时,要通过防腐层来封装变化,这样业务功能不变化,该功能就不会变化(变化的是防腐层里的实现);

以下记录了马士兵DDD公开课中,通过一个选课系统,比较领域驱动设计与MVC实现的不同:

  • 业务逻辑清晰度,业务人员也可以阅读;
  • 业务稳定性,业务不变,代码也不动;
  • 防腐层隔离变化;
  • 贫血模型vs充血模型:Student贫血模型,会被各种Service调用,选课、借书、体育......,会分布在不同的业务中,你还敢随便改Student信息吗?除非你读懂每一个Service的调用过程!改成充血模型,加入upgrade()、run()等和自身状态相关的业务逻辑,每个实体操作自己实体的变化,跨实体的变化,通过领域服务搞定,领域服务调用实体方法完成状态改变。
  • 各领域内自治,可以自我发展;
  • 用仓库StudentReponsitory来管理Student的存储;
  • 仓库中集成工厂Factory/Builder应对复杂对象的组装;
  • MVC保证了实现最差也差不到哪里去(但基本总是最差),DDD如果做得差,会比MVC还要差,如果做的好,的确可以应对业务的变化(了解业务,预测业务的变化-这个比较难,所以DDD做好也很难)。

 

posted on   阿泰555  阅读(104)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
历史上的今天:
2016-10-23 根据类名查所属jar包
2016-10-23 maven配置信息查询
2016-10-23 shell编程(一)--常用变量及表达式
2016-10-23 新建maven工程时pom.xml报错
2016-10-23 maven项目中找不到Maven Dependencies解决办法
2016-10-23 mysql存入中文乱码解决方法(windows环境)
2016-10-23 eclipse快捷键总结

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示