最近迷っていること。
クラスのメンバーオブジェクトのアクセサを直接定義するよりは、隠蔽してあげたほうがいいんじゃないかと思うこと。
最終的にケースバイケースだろうとは思いつつ、気にする観点やポリシーなどはまだまだ引き出しが少ない。
直接アクセス可能にする場合
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 にするのはよさそう。