弁言
MVC,即 Model(模子)-View(视图)-Controller(控制器),是广泛应用于交互式体系中的典范架构模式,尤其在 GUI 和 Web 应用中。
MVC 的概念源自 GOF(Gang of Four)的操持模式中的观察者模式(Observer Pattern),只管 GOF 的经典操持模式中并未明确提出 MVC 这一术语。该概念由 Trygve Reenskaug 在 1979 年初次提出于其论文《Models-Views-Controllers》中。
MVC 架构通过将体系分别为三种关键组件,使其逻辑布局更清楚:
- 模子(Model):管理应用步调的焦点数据和业务逻辑,独立于视图和控制器,不关心数据的体现方式或怎样被利用。
- 视图(View):负责数据的出现,通过从模子获取数据来展示给用户,不包罗业务逻辑。
- 控制器(Controller):处理惩罚用户输入,更新模子并关照视图以更新展示。
经典 MVC 的这种架构分离使得用户界面(视图和控制器)与焦点数据(模子)解耦。本文探究两种主流的 MVC 模式:经典 MVC 和 Web 应用中的 MVC Model 2 模式。
经典MVC
在经典 MVC 中,视图(View)是体系的中心,它负责发起变乱哀求。控制器(Controller)相应这些变乱哀求,更新模子(Model)。当模子发生厘革时,它通过观察者模式关照视图,视图则主动更新。这种模子和视图之间的交互不须要控制器到场。
经典 MVC 重要应用于桌面应用步调中,由于它的观察者模式在当地环境中体现精良。但在 Web 应用中,视图和模子分别位于欣赏器端和服务器端,这种模子观察的机制很难实现。因此,经典 MVC 在 Web 应用中的实用性受到限定。
只管云云,经典 MVC 的分层操持及其使用的操持模式(观察者模式、组合模式、计谋模式)至今仍具鉴戒意义。
观察者模式
经典 MVC 使用观察者模式来实现主动模子(Active Model),即当模子发生厘革时,主动关照视图举行更新。比方,在一个音乐播放应用中,当用户点击播放按钮,控制器关照模子播放音乐,模子可以通过观察者模式关照视图更新播放状态。
在简单场景中,模子可以是被动的(Passive Model),比方,控制器关照视图获取数据,模子则只作为数据持有者而不主动关照视图更新。
组合模式
View和Controlle通常是分层构造的,像树状布局的布局是其典范的实现。组合模式允许将复杂的视图布局拆解为简单的子视图,从而进步体系的可维护性和复用性。
计谋模式
MVC 架构的另一告急特性是,可以在不修改视图的环境下改变体系的相应逻辑。控制器可以封装差别的相应计谋,通过计谋模式,体系可以动态切换控制器,调解用户输入的相应方式。
Web应用MVC:Model 2
Model 2 是为顺应 Web 应用的特点而对经典 MVC 举行的改进,常用于 JSP 和雷同的 Web 框架中。它接纳了前端控制器模式(Front Controller Pattern),即全部用户哀求起首由控制器处理惩罚,控制器负责调用模子和视图,天生用户所需的内容。
在Model2模式中,Controller是体系的焦点,用户全部哀求被 Controller 拦截(Front Controller模式,servlet / filter)。Controller 起宰衡应用户输入,并更新数据到Model组件,然后从Model获取须要的数据,并整合成 View 层须要的 Domain Objects(一样寻常包罗数据和业务逻辑,POJO / JavaBean)。随后,Controller 根据效果调用得当的 View 举行展示。
每个视图都有于此相干联的控制器组件。控制器继承用户输入,用户通过控制器与体系交互,控制吸取到用户输入指令,起首利用Model实现数据更新,然后Controller关照View展示最新数据,View在展示过程中会与Model通讯获取最新数据。
此模式下,View 和 Model 的部分大概有多种实现。一样寻常倾向于单向互通(即View可直接获取Model)或间接互通。
比方,在一个电子商务网站中,用户在页面上举行商品搜索利用,哀求起首被控制器(Servlet)拦截。控制器调用模子(数据库利用的 JavaBean)举行商品搜索,获取效果后将数据整合成视图须要的格式,然后调用相应的 JSP 视图页面展示搜索效果。用户可以在视图页面上进一步查察商品详情,视图页面会再次与模子通讯获取商品的具体信息。
Java Web Model 2
Java Web Model 2是Model 2的典范范例,在Model 2构架中,Servlet作为前端控制器,负责吸取客户端发送的哀求,在Servlet中只包罗控制逻辑和简单的前端处理惩罚;然后调用后端JavaBean来完成现实的逻辑处理惩罚;末了转发到相应的JSP页面处理惩罚体现逻辑。
Model2中,JSP是体现层脚色,仅用于将效果出现给用户。欣赏器发来的哀求与Servlet(控制器)交互,而Servlet负责与配景的JavaBean通讯。模子(Model)由JavaBean充当,视图(View)有JSP页面充当,而控制器(Controller)则由Servlet充当。
优缺点
长处
低耦合性
视图层与业务层分离,使得更改视图层代码无需重新编译模子和控制器代码。同样,应用步调的业务流程或业务规则改变只需改动 MVC 的模子层。由于模子与控制器和视图相分离,改变应用步调的数据层和业务规则变得容易。
高重用性和可实用性
随着技能的不停进步,如今须要用越来越多的方式来访问应用步调。MVC模式允许你使用各种差别样式的视图来访问同一个服务器端的代码。它包罗任何WEB(HTTP)欣赏器大概无线欣赏器(wap),好比,用户可以通过电脑也可通过手机来订购某样产物,固然订购的方式不一样,但处理惩罚订购产物的方式是一样的。由于模子返回的数据没有举行格式化,以是同样的构件能被差别的界面使用。比方,许多数据大概用HTML来体现,但是也有大概用WAP来体现,而这些体现所须要的下令是改变视图层的实现方式,而控制层和模子层无需做任何改变。
较低的生命周期资源
MVC使开发和维护用户接口的技能含量低沉。
快速的摆设
使用MVC模式使开发时间得到相当大的缩减,它使步调员(Java开发职员)会合精神于业务逻辑,界面步调员(HTML和JSP开发职员)会合精神于体现情势上。
可维护性
分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。
有利于软件工程化管理
由于差别的层各司其职,每一层差别的应用具有某些雷同的特性,有利于通过工程化、工具化管理步调代码。
缺点
复杂性
MVC 架构固然进步了体系的模块化,但也带来了额外的复杂性,特殊是在小型项目中,大概过于痴肥。
调试困难
由于视图、控制器和模子是相互独立的,调试时大概须要跨多个模块举行排查,增长了调试的难度。
总结
MVC 初次将心智模子与数字模子创建接洽,同时将代码逻辑举行分层,将「渲染」「控制 / 分发」与数据存储举行有机分隔。今后,在涉及界面展示的编程范畴,人们大概率会想到 MVC 的分隔方式并依此实现。因此,MVC 存在各种变种和通讯方式,如 Backbone JS 中 View 和 Model 之间可以相互更改;Cocoa MVC 中 View 和 Controller 之间、Controller 和 Model 之间相互更改。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |