在锻炼您的DDD技能时,假设您有以下对象:
class Person {
Set<Address> addresses = new HashSet<Address>();
}
是否更适合允许对集合进行正常/完全访问:
Set<Address> getAddresses() {
return addresses;
}
如果允许调用者根据需要添加/删除地址,这样做是否更好?或者在这种情况下,让调用者通过Person对象进行操作是否更好:
Set<Address> getAddresses() {
return Collections.unmodifiableSet(addresses);
}
void addAddress(Address address) {
addresses.add(address);
}
void removeAddress(Address address) {
addresses.remove(address);
}
第一种情况可以避免我们创建额外的方法;第二种情况允许Person对象知晓其地址的变化(如果由于某种原因它关心这个问题)。在这里是否有最佳实践?