自学内容网 自学内容网

08.聚合的上下限

原版聚合定义

定义

将实体和值对象聚集到聚合中。每个聚合定义了个边界。为每个聚合选择一个实体作为其根,并通过根来控制所有对边界内对象的访问。外部对象只能持有根的引用:对内部元素的临时引用只能在单个操作中使用。由于根控制了访问,因此我们无法绕过它去修改内部元素。这种安排使得我们可以保证在任何状态变化中,聚合本身的不变量,以及聚合中对象的不变量都可以被满足。

可以看出,这个定义最主要是为了满足不变量,或者说是一致性。从业务角度来看是不变量,从数据库角度来看就是一致性。

问题

原版聚合定义是从“强一致性”、“不变量入手”,但这个定义对建模没有太大帮助

每个黄色点代表一个业务对象,箭头表示它们之间存在的关系,被绿线圈起来的表示这几个业务对象之间存在一致性。到底按哪种方式去将它们聚合是件困难的事情,如果按一致性去划分,很难衡量到底哪几个对象之间一致性更强。
在这里插入图片描述

再回到DDD的核心方法论:领域驱动模型,模型驱动软件设计。从问题域的角度来看,聚合是紧密联系的一组功能;从软件设计的角度来看,聚合是一个内存单元,包含一组对象,要被整存整取。整存整取就是通过仓储一次性把对象存到仓储里,一次性都出来。不存在存一部分或者读一部分的情况。

聚合粒度

粒度越大

  • 越容易实现一致性
  • 封装粒度越大,领域逻辑越多在聚合内实现
  • 整存整取性能开销越高

粒度越小

  • 越难实现一致性,需要更多跨聚合的协调
  • 封装粒度越小,领域逻辑越多在聚合间实现
  • 整存整取性能开销越少

聚合的上下限

  • 下限:不要破坏封装。突破下限沦为贫血模型
  • 上限:不要出现性能问题。突破上限不能落地

实际上,在上下限之间有很大的空间,并没有绝对的唯一的合理模型的设计。可以根据实际情况选择,够用就行。


原文地址:https://blog.csdn.net/Theflowerofac/article/details/143674927

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!