我的问题:我有一个包含项目的集合,这些项目必须具有唯一的名称(由运营商选择)。 如果项目已添加到集合中,我想检查名称是否已被使用。所以我对所有项目都有一个一致性边界 - >我的聚合根。
所以我创建了一个项目父聚合根,它实现了项目集合并检查项目名称是否正确(唯一),管理删除项目/添加项目/验证项目。 此Aggregate父根存储在存储库中。 但是这个Aggregate父母不是一个集合!?我的设计错了吗??我的Aggregate root只用于管理项目,我真的不需要这个父项的数据库表(因为它是一个单例)。我错过了一个点!?
谢谢!
斯蒂芬
答案 0 :(得分:0)
无论是否有数据库表都不是定义聚合根的问题,如果可以根据其内容(此处为项目)重建聚合根,这就足够了。例如,对于最小的聚合根,您需要一个表来存储其ID,其中的实体是任何如何单独存储,但在您的情况下,您说它是一个单身,所以您不需要一个表来存储ID,硬编码ID可能就足够了。
<强>更新强>
如果您的汇总仅用于验证唯一性,那么您可以考虑其他解决方案,请检查this answer
答案 1 :(得分:0)
My Aggregate root仅用于管理项目,我不是 需要这个父级的数据库表(因为它是一个单例)。有 我错过了一个点!?
似乎你错过了普遍存在的语言部分。
FooCollection
或FooManager
通常不是聚合的好名称。您需要对问题域中有意义的业务概念进行聚合建模。
如果一个聚合没有理由不是Foo
的一个包,没有身份并且没有其他数据你想坚持,你可能会错误地识别它或者你错过了您设计中的一个重要概念。
答案 2 :(得分:0)
使用存储库中的数据创建聚合,其中只有部分聚合存储在存储库中: