1什么是MVC
2为什么要使用MVC
3怎么来使用MVC
4MVC的缺点
1什么是MVC
MVC模式是“Model-View-Controller”的缩写,中文翻译为“模型-视图-控制器”。
MVC模式将一个交互式应用程序分成3个组件
模型:业务逻辑层,包含核心功能和数据 并实现核心业务逻辑
视图:表示层,向用户显示信息
控制器:控制层,处理用户输入,并实现View层跟Model层的协同工作
为什么使用MVC
具有灵活人-机界面的交互式应用程序
可以灵活选择不同的信息显示方式
可以灵活选择用户的输入方式
针对不同的用户角色,提供不同的用户界面
不同用户具有不同权限,操作的方式也有所不同
模型
业务逻辑层,封装了业务逻辑和数据
业务逻辑(软件的核心)
数据以及访问它们的函数(视图组件使用)
执行特定应用程序处理的过程(控制器代表用户调用)
模型对于用户来说是不可见的(M与V独立)
模型独立于特定输出表示或者输入方式(M与C独立)
用户只能通过控制器操作模型(C是M与V之间的桥梁)
视图View
表示层。就是用户看到并与之交互的界面,通常实现数据的输入和输出功能。
向用户显示信息
不同的视图使用不同的方法呈现信息
每个视图组件都有一个更新函数,这个函数被模型变更通知激活
这个函数被激活(此时模型已经改变)后,将使得视图重新和模型一致
在初始化阶段,视图向模型登记请求变更通知(表)
从模型获得数据
通过状态查询函数实现
例如:定时刷新
控制Control
控制层。起到控制整个业务流程的作用,实现View层跟Model层的协同工作。
每个视图有一个相关的控制器组件(一一对应)
控制器组件接受事件,并翻译成输入
事件如何发送到控制器由用户界面平台决定
事件被翻译成为对模型或者视图的请求
如果控制器的行为依赖于模型的状态,那么控制器也需要向模型登记请求变更通知
例如:用户点击按钮,按钮的事件响应函数将采取相应的措施处理用户要求
用户仅仅通过控制器与系统交互
变更-传播机制
一个模型可对应多个视图
如果用户通过一个视图的控制器改变了模型中的数据,那么依赖于该数据的其他视图也应该反映出这样的变化
一旦模型的数据发生了变化,模型需要通知所有相关的视图做出相应的变化
维护数据的一致性
这样的方式可以通过观察者(Observer)设计模式完成
怎样使用MVC
视图与控制器是一一对应的关系
模型与视图是一对多的关系
变更-传播机制保持模型与视图、控制器之间状态的一致性
MVC的优点
将视图展示和应用逻辑清晰的分离开来,降低了模型和视图之间的耦合性,使得系统设计时具有更高的灵活性。
首先,最重要的是应该有多个视图对应一个模型的能力。在目前用户需求的快速变化下,可能有多种方式访问应用的要求。例如,订单模型可能有本系统的订单,也有网上订单,或者其他系统的订单,但对于订单的处理都是一样,也就是说订单的处理是一致的。按MVC设计模式,一个订单模型以及多个视图即可解决问题。这样减少了代码的复制,即减少了代码的维护量,一旦模型发生改变,也易于维护。 其次,由于模型返回的数据不带任何显示格式,因而这些模型也可直接应用于接口的使用。
MVC的优点
再次,由于一个应用被分离为三层,因此有时改变其中的一层就能满足应用的改变。一个应用的业务流程或者业务规则的改变只需改动MVC的模型层。
控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起完成不同的请求,因此,控制层可以说是包含了用户请求权限的概念。
最后,它还有利于软件工程化管理。由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化产生管理程序代码。
MVC的不足体现在以下几个方面:
(1)增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
(2)视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
(3)视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。