バックグラウンド
私は「クリーンコードブック」を読んでいます。並行して、私は銀行口座などの体操のカタに取り組んでおり、そのルールに固執しています:
体操の9番目のルールは、ゲッターやセッターを使用しないことです。
とても楽しいようで、私はこの原則に同意します。さらに、作者はClean Codeの98〜99ページで、ゲッター/セッターが抽象化を壊し、オブジェクトに問い合わせる必要はないが、オブジェクトに通知する必要があると説明しています。
これは私の心の中で完全に理にかなっており、私はこの原則に完全に同意します。問題は実際に起こります。
環境
たとえば、一部のユーザーをリストし、ユーザーの詳細を表示する必要があるアプリケーションがあります。
私のユーザーは以下で構成されています:
-> Name
--> Firstname --> String
--> Lastname --> String
-> PostalAddress
--> Street --> String
--> PostalCode --> String
問題
どのように私は行うことができ、または私は私だけ(簡単な情報を表示する必要があるときゲッターを避けるために何ができると私はその特定のフィールドに余分な操作を必要としないことを確認する必要があり(単純でのFirstName値を表示します)ランダム)出力サポート?
頭に浮かぶのは
1つの解決策は、
user.getName().getFirstName().getStringValue()
これは完全に恐ろしいことであり、体操の多くのルールを破り、デメテルの法則を破ります。
別のものは次のようなものです:
String firstName = user.provideFirstnameForOutput();
// That would have called in the user object =>
String firstName = name.provideFirstnameForOutput();
// That would have called in the name object =>
String firstName = firstname.provideFirstnameForOutput();
しかし、私はこのソリューションに慣れていません。それは、デメッターの法則に一致することだけを目的とするメソッドで標準のゲッター/セッターをバイパスするような「高次のアクセサー」のようです...
何か案が ?