最近迷っていること。
クラスのメンバーオブジェクトのアクセサを直接定義するよりは、隠蔽してあげたほうがいいんじゃないかと思うこと。
最終的にケースバイケースだろうとは思いつつ、気にする観点やポリシーなどはまだまだ引き出しが少ない。
直接アクセス可能にする場合
public class Person { private Phone phone; public Phone getPhone(){ return phone; } public void setPhone(Phone phone){ this.phone = phone; } }
隠蔽する場合
public class Person { private Phone phone; public String getPhoneNumber(){ return phone.getNumber(); } public void setPhoneNumber(String number){ phone.setNumber(number); } }
なぜ隠蔽するほうがいいと思ったか
理由1
phone
はPersonが持ち主にもかかわらず、外部から直接アクセス可能になることによって、 phone
のコントロールを外部に渡してしまうことになるから。
(Effective Javaでオブジェクトじゃなくて Date#getTime()
を返せっていうような話もあったような)
理由2
PersonクラスのクライアントがPhoneクラスについて依存することになるから。
ありだな、と思った意見
phone
フィールドを protected
にするのはよさそう。