【发布时间】:2014-10-29 00:49:34
【问题描述】:
假设我有两个实体用户和项目。这两个实体之间的域中唯一的行为是用户可以喜欢一个项目。由于对用户可以喜欢多少项目没有限制,因此这种多对多关系可能很大。
我认为让 User 在其模型中包含他们喜欢的项目列表或其他方式在性能方面没有意义,因为我必须加载可能很大的项目集合才能添加只有一项。从领域设计的角度来看,让任何一个实体在其字段中引用另一个实体对我来说也没有意义,因为没有任何行为需要存在项目或用户的集合。
我确实需要保持这种关系,因为 UI 需要显示用户喜欢的项目列表和喜欢项目的用户列表。该需求可以通过读取模型来满足,但我仍然需要一个域概念来捕获这种关系,以便它可以被持久化。
我能想到的一种方法是引入聚合的关系类型,比如 UserLikeItem,并让方法 user.like(item) 返回一个 UserLikeItem 实例,然后我可以使用 UserLikeItemRepository 来持久化。
这是一个有效的解决方案吗?在 DDD 中建模这种大型但非行为关系的自然方式是什么?
【问题讨论】:
-
我喜欢(双关语!)您的解决方案,即使它不需要是
UserIMO 上的方法。它还允许您捕获其他信息,例如项目被点赞的时间、在什么情况下等。相同的 AR 也可以用于不同,但也许您需要为它找到一个更好的名称。 -
我同意,我唯一可能要添加的就是项目的
LikeCounter,这样您就可以显示项目的总点赞数,而无需点击UseLikeItem数据源. -
一个事务对象或一个域事件“UserLikedItem”似乎适合你给我们的小东西。
标签: domain-driven-design domain-model