我正在努力研究聚合和聚合根.我有一个自然聚合根,适用于大约60%的用户请求.即这些请求自然适用于聚合根.
在我的聚合中,我有另一个实体,它只能作为聚合根的成员存在.但是,用户将被告知这个其他实体对象.从概念上讲,用户有时可以直接对此非聚合根对象进行操作.
所以,我想我有几个选择:
它们都可以是聚合根,具体取决于用户请求的操作.
所有操作都必须通过顶级聚合根.
请注意,顶级聚合根将包含此其他实体的集合.
例:
主要集合根:汽车
第二个实体:座位(根据类型,汽车有2个或4个座位).在我的域名中,座位只能作为汽车的一部分存在.
域中的大多数操作都在Car级别.所以这将是聚合根的一个很好的候选者.然而,(我在这里努力争取示例),一些操作将在座位级别,例如SpillCoffee,ChangeFabric,Clean ....
座椅和汽车都可以是聚合根?或者我应该始终从汽车开始?
谢谢
聚合的想法是保证一致性,是负责数据完整性和强制不变量的根.
假设有一条规则,例如"所有座位的布料必须相同",或者"如果车内有人,你只能在座位上洒咖啡".一旦客户满意,执行这些将会更加困难.能够单独更换布料,或者需要将这些不变量强制到外面(危险区域).
恕我直言,如果完整性或强制不变量不是问题,那么实际上并不需要聚合.但是,如果有必要,我的建议是用汽车开始一切.但总是想到这个模型.如果有这样的不变量,那么谁强制执行这些不变量?然后尝试将这个想法传递给代码,一切都应该没问题.