2013-05-06 73 views
1

我真的很苦恼以下场景:如何确定根聚合包含太多一对多关系的时间?

比方说,我有一个用户聚合。用户可以创建1个以上的群组,消息,朋友,照片画廊等。现在,群组,消息,朋友,照片画廊应该分别处于自己的聚合分组中。创建一个包含IList <>属性的用户实体似乎是不合逻辑的,而不是仅仅具有用于组,消息,朋友,照片库等的用户属性。这种方法从DDD中最有意义透视?我也在考虑实体水合,并且根据需要获得组,消息等,而不是从用户实体中检索所有实体,似乎更有意义。处理这种情况的建议方法是什么?

回答

4

即使不太了解您的特定业务领域,将User类作为一种上帝与其下的所有其他内容聚合在一起听起来也是非常错误的。

将您的实体分组为具有聚合根的较大实体完全取决于您的业务是如何工作的。例如,PhotoGallery可能是一个聚合根,其下有许多Photo对象,或者PhotoGalleryPhoto都可以是单独的聚合根。

例如,您可能会运行一家照片开发公司,其照片始终作为完整的PhotoGallery(1个聚合根)收集,处理和处理。

或者您可以运行社交网站,其中Photo可以共享和使用,无需加载整个图库(2个聚合根)。

所以这真的取决于你和你的业务领域的指示。你总是可以吮吸它,看看它,看看它是如何发展的,然后再重构。

+0

看起来像下面这样:用户实体不会包含任何其他聚合的IList属性,但其他聚合(即组,消息,朋友等)将包含用户实体的属性?对我而言,这似乎是组织上最有意义的,因为我没有看到用户从用户配置文件创建消息,组等。每个其他聚合涉及用户界面上的不同部分。 – user1790300 2013-05-06 12:51:55

+0

您的聚合根很可能具有其他实体和值对象的集合。对于像朋友这样的聚合,朋友可以很好地引用用户(强耦合表示朋友的意图始终是一个用户的朋友),但对于消息等对象而言,将消息强烈地耦合到用户,如果消息可能属于您的域中的远程系统,游戏或其他实体等,可能并不理想。 – 2013-05-06 21:32:25

相关问题