DDD该怎么去落地实现(2)再谈聚合

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


DDD落地中的聚合概念难点
尽管领域驱动设计(DDD)已在许多开发团队中得到实践,但在软件研发领域,成功落地DDD的案例仍然不多。实践中,开发团队面临许多困难,尤其是关于“聚合”这一概念的应用。
DDD实践中的困难
开发团队在实践DDD时,首先会发现DDD中的概念难以理解,其次是基于DDD的软件开发过程复杂且编码工作量大。这些困难主要集中在“聚合”上,聚合是DDD中的一个核心概念,代表整体与部分的关系,旨在通过整体封装部分来简化系统设计。
聚合的使用问题
聚合的使用在实际编码时可能带来约束,例如,用户和地址的聚合关系导致所有对地址的查找必须经过用户。这种设计在订单查找中变得复杂,因为地址的查找不能直接进行。
限界上下文与聚合
DDD中的限界上下文可以帮助解决聚合带来的问题。通过限界上下文将系统划分成多个子域,各自独立设计,可以在不同的上下文中对同一关系采取不同的聚合策略。
聚合的实现与通用仓库设计
在用户上下文中,用户和地址作为实体采用聚合设计,但在订单上下文中作为值对象,则不使用聚合。实现聚合时,关键在于通过底层平台的封装,设计实现一个通用的仓库,简化DDD落地编码的难度与工作量。
聚合的谨慎使用
聚合代表强耦合关系,设计时需慎重考虑。只有确实是原子的、强关联的、密不可分的关系时,才应设计为聚合。聚合关系不能滥用,应避免在将来的业务变更中,因聚合关系而无法将领域对象划分到不同的上下文中。
结论
聚合是DDD落地实践中的一个难点,它的主要作用是简化复杂业务中的增删改问题。但在使用聚合时需要冷静判断,避免滥用,并确保聚合的设计与业务需求紧密相关。
想要了解更多内容?




白皮书上线