MVC、MVVMモデルについて
2909 ワード
『コードスピッツ』レッスン[ES 6+デザインモードとビューモード]を受講後まとめ
https://www.youtube.com/watch?v=LJhkPP0E6dw&list=PLBNdLLaRx_rLSwAiLS52IXEo26KsMhzLC&index=2&ab_channel=%EC%BD%94%EB%93%9C%EC%8A%A4%ED%94%BC%EC%B8%A0
モデル、ビュー、およびコントローラオブジェクトからなる
モデルオブジェクトは、データを保存するために使用されます.ファイバモードが適用されている場合、ここのデータが変更されると、サブスクリプションのコントローラに通知されます.
ビューオブジェクトは、データをレンダリングするために使用されます.
コントローラオブジェクトは、ビューオブジェクトに一致するモデルオブジェクトを検索して描画します.また、アクションハンドル関数があるため、レンダリング中にアクションハンドル関数を使用してコントローラオブジェクトの関数を登録します.
HomeDetailModel
HomeDetailView
今回のビューはビューモデルの傍観者です.ViewはViewModelを購読しています.ViewModelはモデルのリスナーであり、ビューのオブジェクトでもあります.
ビューモデルはビューに注目しなくなりました.ビューモデルはモデルを購読しています.今まで理解していたと言えば….二重傍観者モデルのように見えます.
https://www.youtube.com/watch?v=LJhkPP0E6dw&list=PLBNdLLaRx_rLSwAiLS52IXEo26KsMhzLC&index=2&ab_channel=%EC%BD%94%EB%93%9C%EC%8A%A4%ED%94%BC%EC%B8%A0
MVCモデル
モデル、ビュー、およびコントローラオブジェクトからなる
モデルオブジェクトは、データを保存するために使用されます.ファイバモードが適用されている場合、ここのデータが変更されると、サブスクリプションのコントローラに通知されます.
ビューオブジェクトは、データをレンダリングするために使用されます.
コントローラオブジェクトは、ビューオブジェクトに一致するモデルオブジェクトを検索して描画します.また、アクションハンドル関数があるため、レンダリング中にアクションハンドル関数を使用してコントローラオブジェクトの関数を登録します.
モデルオブジェクト
const Model = class extends Set{
addController(v){
super.add(v);
}
removeController(v){
super.delete(v);
}
notify(){
this.forEach(v => v.listen(this));
}
}
モデルオブジェクトは、傍観者モードで通知の役割を果たします.ただし、値が変化した場合は、通知する必要はありません.観察中のコントローラだけがあります.HomeDetailModel
const HomeDetailModel = class extends Model{
constructor(_id=err(), _title=err(), _memo=''){
super();
prop(this,{_title,_id,_memo});
}
get title(){return this._title;}
get id(){return this._id;}
get memo(){return this._memo;}
}
Viewオブジェクト
const View = class{
constructor(controller){
prop(this, { controller });
}
render(){
~
}
}
model入力を受け入れ、画面に描画する役割を果たすHomeDetailView
const HomeDetailView = class extends View{
render(model){
const title = model.title;
const memo = model.memo;
const id = model.id;
return append(el('section'),
el('h2', 'innerHTML', model.title),
el('p', 'innerHTML', model.memo),
el('button', 'innerHTML', 'delete', 'addEventListener', ['click', _ => this.controller.$removeDetail(id)]),
el('button', 'innerHTML', 'list', 'addEventListener', ['click', _ => this.controller.$list()])
);
}
};
コントローラオブジェクト
const Home = class extends Controller{
detail(){
const view = new HomeDetailView(this, true);
const model = new HomeModel(true);
model.addController(this);
return view.render(model);
}
}
HomeDetailModelオブジェクトを受信し、画面に描画します.MVVM
今回のビューはビューモデルの傍観者です.ViewはViewModelを購読しています.ViewModelはモデルのリスナーであり、ビューのオブジェクトでもあります.
ビューモデルはビューに注目しなくなりました.ビューモデルはモデルを購読しています.今まで理解していたと言えば….二重傍観者モデルのように見えます.
Reference
この問題について(MVC、MVVMモデルについて), 我々は、より多くの情報をここで見つけました https://velog.io/@effort/MVC-MVVM-모델에-관하여テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol