聚合根不是集合

时间:2017-11-22 10:32:09

标签: domain-driven-design

我的问题:我有一个包含项目的集合,这些项目必须具有唯一的名称(由运营商选择)。 如果项目已添加到集合中,我想检查名称是否已被使用。所以我对所有项目都有一个一致性边界 - >我的聚合根。

所以我创建了一个项目父聚合根,它实现了项目集合并检查项目名称是否正确(唯一),管理删除项目/添加项目/验证项目。 此Aggregate父根存储在存储库中。 但是这个Aggregate父母不是一个集合!?我的设计错了吗??我的Aggregate root只用于管理项目,我真的不需要这个父项的数据库表(因为它是一个单例)。我错过了一个点!?

谢谢!

斯蒂芬

3 个答案:

答案 0 :(得分:0)

无论是否有数据库表都不是定义聚合根的问题,如果可以根据其内容(此处为项目)重建聚合根,这就足够了。例如,对于最小的聚合根,您需要一个表来存储其ID,其中的实体是任何如何单独存储,但在您的情况下,您说它是一个单身,所以您不需要一个表来存储ID,硬编码ID可能就足够了。

<强>更新

如果您的汇总仅用于验证唯一性,那么您可以考虑其他解决方案,请检查this answer

答案 1 :(得分:0)

  

My Aggregate root仅用于管理项目,我不是   需要这个父级的数据库表(因为它是一个单例)。有   我错过了一个点!?

似乎你错过了普遍存在的语言部分。

FooCollectionFooManager通常不是聚合的好名称。您需要对问题域中有意义的业务概念进行聚合建模。

如果一个聚合没有理由不是Foo的一个包,没有身份并且没有其他数据你想坚持,你可能会错误地识别它或者你错过了您设计中的一个重要概念。

答案 2 :(得分:0)

使用存储库中的数据创建聚合,其中只有部分聚合存储在存储库中:

https://vaughnvernon.co/?p=879