背景:
同僚と私はMVCの解釈が異なります。つまり、同じ問題を考えると、根本的に異なる解決策が考えられます。彼はJavaのバックグラウンド出身で、MVCのすべてのコンポーネントが伝統的にオブジェクトをモデル化している可能性があります。私はHaskellのバックグラウンド出身で、OOPの経験はほとんどありません。
問題空間:
モデル化しようとしている問題は、デスクトップ環境に少し似ています。ユーザーセッション(おそらくユーザーのログイン、デスクトップの背景)とデスクトップ上のプロセス(iTunes、Finderなど)には、それぞれ独自のモデルプロパティ(最小化など)があるという概念があります。
次の点に同意します。HMVCが最も優れた表現であると考えています。Session
(デスクトップ)とProcess
(アプリケーション)の2つのMVCオブジェクトがあること、およびProcess
の概念Session
やバックリンクを必要としないことに同意します。
ただし、MVCの中心的な意味と、ユーザーのデスクトップ上のプロセスのリストを保持する場所にどのように影響するかについては、意見の相違があります。
彼の解釈:
彼は伝統的にコードやレンダリングシステムで簡単にモデル化できる非常に有効なポイントを主張しています。彼は、プロセスのリストはProcessController
オブジェクトのリストである必要があり、SessionController
その中にモデルが個別のオブジェクトとして内部に含まれていると述べています。状態の、かなりの量の両方の中にあることをこれは意味SessionController
し、SessionModel
どのように関連しているSessionView
レンダリングする必要があります。
これは、簡単な検索でインターネット上で読み取ることができたものと非常に調和しているようです。
私の解釈:
私の解釈は最大のアーキテクチャ変更を必要とし、コードでの実装は難しいようですが、概念的には正しいと思います。なぜこれが当てはまらないのか、またはこの解釈と一致する別のモデル(MVCでない場合)を提示し、両方のパターンの長所と短所を強調して、最も情報に基づいた決定を下せるように誰かに説明してほしい(どちらも持っていない)ソフトウェアアーキテクチャの強力な背景)。
:私は3つの交換部品とトライアドとしてMVCを参照してくださいModel
、Controller
とView
。これは、私がインターネット上で読むことができるものと一致し、一部のソースは、「同じインターフェースを持つビュー、コントローラー、およびモデルは、異なる効果に交換可能である必要がある」のようなものに沿って物事を言うでしょう。これが機能すると想像する方法は次のとおりです。
- モデルを交換すると、データの検証または保存の方法が変わります
- コントローラを交換すると、ページの動作が変更されますが、ページの一般的なデータコンテンツを変更する可能性があるものは変更されません
- ビューを交換すると、ページの表示方法が変わります
このことから、私は任意の与えられたことを推論Model
し、View
コントローラだけで行動していないページの「内容」を変更する必要があるため、唯一のコントローラはデータにページを変更しないでくださいスワッピング最初にレンダリングします。これは、鉄道システムの「駅コントローラー」としてのコントローラーの概念的な視覚化、モデルとしての鉄道の計画、および実際の物理的な外観とトラックの外観/感触(異なるフレーバーでは、「ビューとして「リアル」または「バーチャル3D」)。
ここで私たちは反対します:
でユーザーに表示されるデータSessionView
はデスクトップ上のさまざまなプロセスによって変更されるため(プロセスは関連データとしてモデル化しています)、にSessionModel
はのインスタンスのリストが含まれているはずですProcessModel
。つまりSessionController
、同じでランダムを使用すると、SessionView
概念的に同じデータ(デスクトップ上のプロセス)が表示されるはずです。
彼は、Model
別のモデルについて決して知らない方がより意味があると主張しています。つまり、SessionController
にはのリストがProcessController
あり、各Controller
オブジェクトにはそのモデルへのリンクがあります。a SessionView
が同じSessionModel
でも異なるSessionController
場合、ユーザーに表示されるデータは根本的に異なるはずです。
それぞれの解釈について議論し、最も十分な情報に基づいた結果に到達するために私たちを助けてください。
御時間ありがとうございます!