DDD如何正确返回实体集合?

时间:2018-11-08 13:51:01

标签: domain-driven-design

我有:

@DomainAggregate
@Entity
class Meeting {

... more fields here

private Set<AppUser> guests;

public Set<AppUser> getGuests() {
    return Collections.unmodifiableSet(guests);
}
}

AppUser是实体(不是值对象)。 我很困惑返回集合的正确方法是什么。 根据DDD,我的方法正确吗? (不能修改集合,但是它的元素可以修改) 还是应该为我的AppUser对象创建dto类? (这将确保我无法汇总汇总中的任何数据 从外部进行访问,但将强制执行一些操作,例如: 创建dto,复制数据等)

1 个答案:

答案 0 :(得分:1)

  

根据DDD,我的方法正确吗?

根据Evans第6章,这是可以接受的。他写道(早在2003年)

  

除根ENTITY外,AGGREGATE边界之外的任何内容都不能保存对内部任何内容的引用。根ENTITY可以将对内部ENTITIES的引用传递给其他对象,但是这些对象只能临时使用它们,并且它们可能无法保留引用。

     

作为先前规则的补充,只能使用数据库查询直接获得AGGREGATE根。所有其他对象必须通过关联遍历找到。