关系型数据库的反DDD特性

在关系型数据库中,我们一般会基于关系数据库的思维,去建立聚合:
image
这导致三个聚合之间产生了关系,而关系正是DDD价值观中所要杜绝的。
在DDD中,三个聚合应该呈现如下的样子:
image
不过这会有一个很明显的问题,就是关系是客观存在的,所以上图不能反映完整的设计。
image
这种设计符合面向对象思想,也是DDD的核心理念。我们不能把聚合单纯的看做表的另一种表达形式,而是应该从业务角度去分析,一个用户究竟该有什么属性、什么行为。
代价与收益
这样设计的代价是数据会产生一定程度的冗余,但我们可以通过事件驱动的方式保持一致性。
而收益就是系统被明确地划分了,每个领域变得完全独立。
在DDD的思想中,这不叫冗余,而是用户理所当然应该有这么一个属性,这是和业务统一的。
现实世界到处都是冗余
日常生活中,信息冗余是很普遍的,比如我的手机通讯录,冗余了你的名字和手机号,因为“我的通讯录”就是客观上“我”的属性,现实世界到处是类似的例子。

结论
所以在设计模型时,不能用关系型数据库的思维来表达聚合间关系,要忘记关系数据库、忘记三范式,才能设计出符合现实业务的模型

posted @ 2025-03-31 19:21  南山有榛  阅读(23)  评论(0)    收藏  举报