我有:
@DomainAggregate
@Entity
class Meeting {
... more fields here
private Set<AppUser> guests;
public Set<AppUser> getGuests() {
return Collections.unmodifiableSet(guests);
}
}
和AppUser
是实体(不是值对象)。
我很困惑返回集合的正确方法是什么。
根据DDD,我的方法正确吗?
(不能修改集合,但是它的元素可以修改)
还是应该为我的AppUser对象创建dto类?
(这将确保我无法汇总汇总中的任何数据
从外部进行访问,但将强制执行一些操作,例如:
创建dto,复制数据等)
答案 0 :(得分:1)
根据DDD,我的方法正确吗?
根据Evans第6章,这是可以接受的。他写道(早在2003年)
除根ENTITY外,AGGREGATE边界之外的任何内容都不能保存对内部任何内容的引用。根ENTITY可以将对内部ENTITIES的引用传递给其他对象,但是这些对象只能临时使用它们,并且它们可能无法保留引用。
作为先前规则的补充,只能使用数据库查询直接获得AGGREGATE根。所有其他对象必须通过关联遍历找到。