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