David Westは、著書Object Thinking(第10章、セクション1、サブセクション2)で、理想的なOO環境では、すべてのオブジェクトが要求に応じて自分自身を表示できる必要があると提案しました。人間向け(GUIとして)、非ネイティブコンポーネント(JSONやXMLとして)、またはその他の関係者向け:
オブジェクト思考は、ビュー(インターフェイスとも呼ばれます)は、グラフィックまたはその他の方法で、オブジェクトが別のオブジェクトと通信するための手段であり、それ以上のものではないと言います。ビューの必要性は、オブジェクトが他のオブジェクト(通常は人間)またはアプリケーション(たとえば、プラットフォーム間で共有されているデータオブジェクトのXMLビュー)に対して「非ネイティブ」形式で表示される必要がある場合に発生します。
ビューが満たす必要のあるニーズとパラメーターの発見は、オブジェクトが参加するシナリオで明らかになります。オブジェクトがそれ自体を表示するように要求されるときは常に、その表示メッセージの送信者に適したビュー(表現)を使用する必要があります。たとえば、オブジェクトがそれ自体をインスタンス化しようとしている(それ自体の値を取得している)場合、そのオブジェクトのビューを、人間(または他のサービス提供オブジェクト)に暗黙の要求として値を提示する必要があります。ソフトウェアオブジェクトと人間のオブジェクトの間の仲介役として機能するGUIを構築する場合は、表示用にグリフを使用し、対話用にウィジェットを使用します。
しかし、どのグリフとウィジェットをGUIに含める必要がありますか?アプリケーションの実行中に当面のシナリオのシナリオを完了するために必要なもののみ。この視点は、アプリケーションからGUIを定義することを示唆しているため、ほとんどの開発者にとって直観に反しています。
例として、醸造所を考えてみましょう。片側にはビールが入ったバットがあります。ボトルウォッシャー、フィラーステーション、キャッピングマシン、パッケージアセンブラーで構成される複雑な生産ライン。その上にあるのは、醸造所を監視し、人間の管理者にステータスと問題を通知するコントロールステーションです。従来の開発者は、コントロールパネルの観点から「醸造所管理システム」の分析と設計を開始する可能性があります。これは、インターフェースからの設計に似ています。
オブジェクト思考は、代わりに、どのオブジェクトが醸造所とそのすべての無数の機械の主要な顧客であるかを検討することを示唆します。誰のために、機器の複雑な迷路が存在しますか?ビジネスの正解は、もちろん「お客様」です。しかし、オブジェクトの考え方をより反映した答えは、「ビール」です。すべてのシナリオは、ビールの観点から書かれており、キャップを付けて、ボトルに入れられ、パッケージに入れられ、トラックに常駐しています。コントロールパネルは、醸造所の状態の受動的な観察者5です。ある時点でビールに問題が発生した場合、介入サービスを要求するメッセージをコントロールパネル(またはマシン固有のコントロールパネル)に送信することにより、オペレーターの介入を要求するのはビールの責任です。
このパースペクティブは、GUI設計を簡素化し、さらに重要なことに、コントロールパネル(GUI)のパースペクティブから設計するときに必然的に発生すると思われるマネージャーおよびコントローラーオブジェクトのホストを排除します。
オブジェクト指向の世界の初心者から来る:これは本当にそうでしょうか?
自分自身を表現する方法を知っているオブジェクトがあれば、ウェストが彼の本で繰り返し言ったコントローラー/マネージャーオブジェクトの数を減らすことができます。しかし、この「ルール」を守らないとSRPが破られますか?
また、(それが事実であることが判明した場合)、たとえばAndroidアプリケーションでの典型的な実装を考えると、どうすればこの種の目標を達成できるでしょうか?私たちが作成するすべてのオブジェクトは、それ自体をとして提示する方法を知っている必要がありView
ますか?