扫码阅读
手机扫码阅读

DDD你真的理解清楚了吗(2)

72 2025-01-03

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:DDD你真的理解清楚了吗(2)
文章来源:
充满诗意的联盟
扫码关注公众号

充血模型 vs 贫血模型

随着软件系统的复杂化,开发团队越来越倾向于实践DDD(领域驱动设计)来解决设计开发和更新维护的问题。DDD有助于理清复杂业务,但学习成本高,难以落实。

模型选择的困境

实践DDD时,团队在领域建模后,面临选择贫血模型或充血模型的难题,两者争议多年仍无定论。

贫血模型和充血模型

Eric Evans的著作《领域驱动设计》后,Martin Fowler批评了贫血模型。贫血模型的设计中领域对象仅包含属性和get/set方法,所有操作都在Service层实现,导致业务与技术实现耦合。

充血模型则尝试将领域模型的原貌还原为领域对象,包含所有业务操作,但实现中面临诸多挑战。

结合两种模型

作者认为,纯粹采用贫血模型或充血模型均有问题,应结合二者,取长补短。

落地领域模型

领域模型编码时,应将对象关系落地为领域对象设计,如订单对象应包含用户、地址、订单明细等引用。将一些业务操作和封装写入领域对象中,但不包括需要远程调用的操作。

实际操作过程

前端提交订单后,后台通过Controller转换json为订单对象,然后Controller调用Service中的方法。Service中部分操作采用贫血模型,特别是涉及远程调用的操作,其余通过领域对象实现充血模型。

模块间的交互

Service与Service间交互,领域对象内部封装,业务代码与技术实现分离,适应技术变迁。

数据持久化

DAO层负责数据持久化,根据对象关系定义保存数据库。查询订单需同时查询多个表,并装配成完整订单对象,领域模型中的关系通过DSL配置表达。

(待续)

这个HTML摘要概述了文章内容,提出领域驱动设计(DDD)在软件开发中的应用挑战,特别是在选择充血模型和贫血模型之间的困境。它介绍了两种模型的定义及其优缺点,并主张结合两者的优点以优化设计。文章解释了如何在代码中实现领域模型,处理模块间交互,并处理数据持久化,同时预告了后续内容。

想要了解更多内容?

查看原文:DDD你真的理解清楚了吗(2)
文章来源:
充满诗意的联盟
扫码关注公众号

范老师与大家探讨架构设计、软件重构、敏捷开发,以及微服务、大数据技术。

14 篇文章
浏览 2630
加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线