在锻炼你的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对象知道其地址的变化(如果它因某种原因而受到关注).
这里有最好的做法吗?
解决方法:
我更喜欢第二种方法,但我相信,除了客户端的不良意外之外,不可修改的设置会为您带来很少的收益.
如果您希望向客户端传达此集合是不可变的,那么您应该使用一种在其API中保留可变性的集合类型(而不是它的实现).也就是说,调用声明存在并捕获UnsupportedOperationException的方法就像在与您第一次约会的女性上找到一个单元.
我喜欢Josh Bloch,但我认为他搞砸了这个.
标签:java,domain-driven-design 来源: https://codeday.me/bug/20190626/1289401.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。