オブジェクトの状態を公開したくないが、(HTML、XML、または JSON などで) 表示する必要がある場合、MVC 環境でそれを行うにはどうすればよいでしょうか。ダムダウンされた不変オブジェクト(必要に応じて「データクラス」)をエクスポートするエクスポートメソッドを持つことは理にかなっていますか?インターフェイスと対話する render メソッドを追加するのはどうですか? この問題に対する他のアプローチはありますか?
2 に答える
render メソッドは、状態を公開しないことに最も近い方法です。もう 1 つの方法 (Smarty ユーザーにはよく知られています) は、ビューの非オブジェクト データ構造を処理するようにフィードすることです。
ただし、これらの抽象化および/またはそれらが提供するインターフェイスを隠すことが解決している問題は何ですか? このすべての作業を行う場合は、IMO によって節約される作業があることを確認する必要があります。
カプセル化のポイントは、実装を隠すことです。他のオブジェクトが知る必要がある「状態」があります。オブジェクトの全体的な目的が、そのような状態を伝えることである場合があります。
たとえば、最終状態にあるかどうかを示すゲッターを持たない定義済み有限オートマトン オブジェクトを使用しても、まったく役に立ちません。しかし、その情報が内部でどのように保存されているかをカプセル化することは確かに便利です。
現在、ゲッターとセッターの目標は、オブジェクトの状態のプロパティへのインターフェイスを提供することです。これは、実際の実装方法とは関係がない場合があります。確かに、ほとんどの場合、これらのプロパティはオブジェクト内のフィールドであり、getter と setter は単なる浅いシェルです。一方、ゲッターとセッターはインターフェイスの互換性を確保するため、内部実装を自由に変更できます。
ただし、これらのプロパティが実際の実装に関連しすぎていて、オブジェクトの内容とあまり関連していない場合は、そのようなゲッターとセッターを削除することを検討する必要があります。
とはいえ、ユーザーに何かを表示する必要がある場合、これは他のオブジェクトが知る必要があるプロパティです。多くの理由から、オブジェクトはそれ自体を表示する方法に関心を持つべきではありません。その 1 つは、アプリケーションがどのように使用されているかを知らなければ、どのようにレンダリングする必要があるかを知ることができないということです。これにより、IT 部門は他のオブジェクトについて多くのことを知ることになります。