领域驱动设计:如何建模大型但行为很少的关系

Zij*_*eng 5 domain-driven-design domain-model

假设我有两个实体User和Item.这两个实体之间域中的唯一行为是用户可以喜欢某个项目.由于对用户可以喜欢的项目数量没有限制,因此这种多对多关系可能很大.

我不认为让用户在其模型中包含他们喜欢的项目列表或其他方式在性能方面是明智的,因为我必须加载一个可能大的项目集合才能添加一个项目.从域设计的角度来看,让任何一个实体在其字段中引用另一个实体都没有意义,因为没有行为需要存在项目或用户的集合.

我需要保持这种关系,因为UI需要显示用户喜欢的项目列表和喜欢项目的用户列表.这个要求可以通过读取模型提供,但我仍然需要一个域概念来捕获这种关系,以便它可以被持久化.

我可以提出的一种方法是引入聚合的关系类型,比如UserLikeItem,并且让user.like(item)方法返回UserLikeItem的一个实例,然后我可以使用UserLikeItemRepository来持久化.

这是有效的解决方案吗?DDD模拟这种大型但非行为关系的自然方式是什么?

Sud*_*han 0

我会对此进行挖掘:),IMO,如果没有行为,它就不会存在于“领域模型”中,如果你的绝大多数概念没有行为,那么你就不需要“领域模型”,您可能应该查看事务脚本类型的模式而不是域模型。

我会将您的问题解释为“我如何以高性能的方式持久保存多对多关系”,对于这个问题我们有多个答案,一个是您提到的,另一个可能只是将 id 列表存储在类中。

域模型和持久性后端的面向对象表示是两个独立的事物,域模型首先是行为,因此您考虑行为,然后将属性添加到将受该行为影响的域模型中,否则您需要的是“持久化后端的面向对象表示”(DTO)

但是,当您有域模型的情况下,但只有几个概念贫乏且缺乏行为时,事情就会变得棘手,但这是另一天的问题:)