MVC 模型:表示系统的数据对象,数据对象包括数据及数据的数据的增删改查方法。数据变化时需要广播相关数据。
视图:表示用户所见以及交互的界面,成为模型数据的可视化呈现,视图对象可能包含其中的子视图,运用组合模式将所有子视图整合成一个一般性视图。各子视图共享同一个数据模型。单个子视图包含DOM元素、DOM元素的绑定事件、DOM元素的增删改方法、子视图的rander()方法、广播视图的变化(由控制器订阅并同步模型)、订阅数据模型广播的数据增删改事件。一般性视图对象包含各子视图的列表,及其rander()方法,该rander()方法会分别调用各子视图的rander()方法。rander()方法一般需要将模型作为参数,由控制器调用。一般现有框架由模板驱动渲染,因而不需要rander()方法。
控制器:连接模型与视图,将模型和视图作为参数传入。模型和视图作为控制器对象的成员,监听视图的变化,并同步模型数据。
消息在系统中的传输是从视图至控制器、至模型,然后,模型会广播发布一个事件,直接更新视图。
MVP 与MVC的区别: 在MVC模式中,视图可以根据模型中所发生的变化进行直接更新;
而在MVP模式中,模型与视图之间的所有通信必须经过表示器层。
视图不再订阅从模型中广播发出的事件而直接自更新,视图不应该直接包含事件处理代码,而应该从表示器驱动视图中的更新。
视图只是发出基于视图的事件,而表示器负责处理模型与视图之间的通信。
表示器同时订阅视图和模型中的事件,分别去更新模型和视图。
模型:与MVC的模型一致。
视图:与MVC的区别是,不再订阅数据模型广播的数据增删改事件,一般性视图也需要DOM元素的增删改方法,但这些方法被表示器调用时,必须执行所有子视图的相同名称的方法。
表示器:与MVC相比增加了订阅模型中的事件。
MVVM