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做好也很难)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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快捷键总结