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);
}
最初のケースでは、余分なメソッドを作成する必要がありません。2番目のケースでは、Personオブジェクトがそのアドレスの変更を認識できます(何らかの理由で気にかけた場合)。
ここにベストプラクティスはありますか?