MVC是一种架构设计模式,它通过关注点分离鼓励改进应用程序组织。它强制将业务数据(Model)与用户界面(view)隔离,第三个组件(Control)仍然管理逻辑和用户输入。被称为模型-视图-编辑器(Model-View-Control-Editor)。AngularJS就使用了此模式。
Model 代表特定于领域的数据,不了解用户界面(view(视图)和Controller(控制器))。当一个Model(模型)改变时,他会通知他的观察者。Model管理应用程序的数据,model不涉及用户界面,也不涉及表示层,而是代表应用程序可能需要的独特形式的数据。总而言之:Model(模型)主要与业务数据有关。
View 描绘的是Model的当前转态。Observer模式用于让View了解Model什么时候更新或者修改。用户可以与View交互。包括读取和编辑(Model模型),即在Model获取或设置属性值。但是更新Model的实际任务其实是在Control(控制器)上。总而言之:View是应用程序数据的可视化表示。
Control作用是处理用户交互(如按钮和点击等动作),为View做决定。当用户操作View时,他通常负责更新Model。可以认为Control在MVC中扮演一个角色:view策略模式的简易化,view在其判断力下降委托给Control(控制器)进行操作,这是策略模式的工作原理。当view认为合适时,view可以委托Control来处理用户事件。总而言之:Controller(控制器)管理应用程序中Model(模型)和View(视图)之间的逻辑和协调。
MVVM(模型-视图-视图模型)是一种基于MVC和MVP的架构模式,视图更清晰地将用户界面(ui)开发从应用程序的业务逻辑与行为中分离。这种模式的实现都要利用声明式数据绑定来实现将View(视图)工作从其他层分离。
MVP(模型-视图-表示器)是MVC设计模式的一种衍生模式,专注于改进表示逻辑。P代表表示器这是个包含用于View(视图)的调用将委托给表示器,表示器是从View(视图)中解耦,通过接口与他对话。当Model(模型)变化时,监控Model(模型)和更新View(视图)。P将Model(模型)有效地绑定到View(视图),这是以前在MVC中Controller(控制器)的责任。 由View进行请求,表示器执行任何与用户请求有关的工作,并将数据回传给他们。表示器检索数据并操作数据,并确定应该如何在View(视图)中显示这些数据。在有些实现中,表示器还与服务层交互来持久化数据Model(模型)。Model(模型)可能会触发事件,表示器的角色是订阅他们,这样就可以更新View。这种被动架构中,没有直接数据绑定的概念。View(视图)暴露了setter设置器,表示器可以用它来设置数据。
图3.0 MVP模式