0

私は MVC パターンをほぼ完全に理解しましたが、まだ混乱していることが 1 つあります。

たとえば、この例では、コントローラー、モデル、および 5 つのビューがあるとします。モデルが変更されるたびに、モデルの変更の結果として、これら 5 つのビューの (適切な) サブセットを (最適に) 変更したいと考えています。

それを行う正しい方法は何ですか?

現時点での MVC についての私の理解では、モデルはコントローラーまたはビューについて何も認識してはならないということです。それはビューにも当てはまりますか?つまり、ビューはコントローラとモデルについても知りませんか?

上記の仮定に基づいて、特定の要件を持つ私の MVC プログラムの提案は、構造的に次のようになります。

擬似コード:

オプション1

モデル

//Random data, no references to either controller or view

notifyObserver(){

    observer.modelChanged();    

}

コントローラ

reference MODEL
reference VIEW

var model;

var view1;
var view2;
var view3;
var view4;
var view5;


createController(m,v1,...,v5){
    model = m;
    view1 = v1;
    .
    .
    .
    view5 = v5;

}

modelChanged(){
    view1.updateView(model.someVariable);
    view4.updateView(model.someVariable);
} 

見る

//no references to either model or controller

//some visual elements

updateView(var someVariable){

    myVisualElement.change(someVariable);

}

テストクラス

main(){

   create view1;
   create view2;
   .
   . 
   . 
   create view5;

   create model;
   create controller(model,view1,...view5);
   model add observer(controller);

}

したがって、私が基本的にこれで行っていることは、ビューとモデルの両方が完全に独立して動作しながら、コントローラーにすべてを知らせることです。この場合、CONTROLLERモデルで何かが変更されたときに通知を受け取るのは だけです。その後、先に進み、それに応じてビューを変更します。

オプション 2

したがって、VIEW基本的に と呼ばれるプロパティ/変数がありmodel、次のようにコンストラクターで渡します。

テストクラス

 main(){

   create model;

   create view1(model);
   create view2(model);
   .
   . 
   . 
   create view5(model);

   create controller(model);
   model add observer(view1);
   . 
   . 
   .
   model add observer(view5);

}

このように、すべてのビューはモデルへの参照を持ち、何かが変更されるとすぐにモデルから通知されます。どちらが正しいアプローチなのかわからないため、混乱しています...これを完全に理解するのを手伝っていただければ幸いです。

4

1 に答える 1

0

あなたにとって何が最善の解決策であり、あなたが実際に何を求めているのかを理解するのは困難です.

プラットフォームによって異なりますが、MVC には特定のニュアンスがある可能性があるため、どのテクノロジを使用していますか? MVCには基本的にobserver.modelChangedのようなものはありません。使用すると、実装の詳細に特定の制限/可能性が追加されます。

たとえば、モバイル アプリケーションを使用する場合、その MVC を MvvM (Model-View-ViewModel) (ViewModel がコントローラーとして機能する) に変換することをお勧めします。その場合、「コントローラー」はモデルについてのみ認識します。ビューはコントローラーについてのみ認識します (そのモデルを部分的に表す)。

Web アプリケーション ((ASP.NET) MVC) を使用する場合、モデルをビューに渡すコントローラーがあります (ビューが実際にどのように機能するかを知らなくても)。ビューもモデルを認識し、モデルに適応しますが、コントローラーにも接続します。同時に、モデルは言及された人のことを知りません。

于 2013-11-03T16:18:37.210 に答える