【发布时间】:2019-07-08 19:26:10
【问题描述】:
我有一组“大”的 AggregateRoots,其属性在其上下文中应该是唯一的。但是我在哪里验证呢?我想这取决于上下文是什么,在我看来,我有两个选择:
要么我在存储库服务中实现验证,因此持久性逻辑可以在保存聚合之前验证唯一属性(然后还必须同步此 AR 类型的所有保存)。
或者我将另一个聚合中的“唯一索引”作为聚合引用的字典移动,并让该字典验证唯一属性。由于我有大量的 AR,如果不实施这种方法可能会出现问题,以便索引可以尽可能多地保存在磁盘上。
但是这里有真正的赢家吗?这两种方法都有效且安全吗?有什么主要的缺点需要考虑吗?其他变体?
我的想法:
第一种方法可能更简单一些,但也更受限制。例如,如果需要,为同一 AR 类型拥有多个索引会更加复杂。另一种方法更本地化为单个聚合,这更符合我猜应该如何处理聚合。第一种方法要求所有这种类型的聚合都由同一进程保存,因为所有保存都必须同步。另一种方法不需要这个,而是引入这个索引聚合,所有保存都必须通过它来验证属性上的新值和更新值。此方法也不会验证数据库中是否存在多个具有相同属性值的聚合,仅验证引用的聚合具有唯一的属性。
【问题讨论】:
-
作为一个好奇心,新的唯一聚合的创建率是多少?是以毫秒、分钟还是小时为单位的?
标签: domain-driven-design ddd-repositories aggregateroot unique-index