前端MV*框架的经典MVC

同样、学习背景

鉴于庄事情日益庞大,很多一直色用保护,由于这些类别的前端基本还是jQuery+jQuery
plugins搞定的,编写的代码可谓是:无组织、无纪律,导致前者维护本更是强,为了解决当下无异难题,决定引入前端MV*框架。从浏览器兼容性、与另零件方便并的角度考虑,最终甄选了backbone.js。因为事先接触过AngularJS,backbone.js我只看了一样龙文档,就能够开发实际项目了;但是发生只问题一直耿耿于怀,由于backbone.js没有明确指出自己的架模式,所以她不属MVC、MVP、MVVM中之另外一样栽,而是在于它们中的某变种,这或多或少受自身最好郁闷,因为这造成我无法准确的组织JavaScript代码。而这无异于问题的根本原因是自身对MV*搭模式之敞亮不敷深刻,所以自己主宰:先将MVC、MVP、MVVM的定义和分理解透彻,再回过头来审视backbone.js。

MVC是一致种架构模式,说白了就算是平等种植集体代码的计,将代码根据职责分开成三块区域,这样的好处很引人注目:易于阅读、便于维护。回想一下并未引入MV*框架前的那么一坨JavaScript代码,我相信大部分总人口都见面表示:我点都未思点了。就算你引入了模块加载框架(requirejs、seajs等),你的代码仍然是“凌乱”的,只不过范围缩小至模块内部而已,前端MV*框架就是为解决是题目出现的。

二、经典MVC

2.1 MVC诞生

20世纪80年份,mvc作为smalltalk-80(传说被的“面向对象编程之主”)的一个类库走上前人们的视野。那个年代浏览器还尚无出现,计算机的图形用户界面(GUI)还一对一之简陋。为了拿UI组件代码从事情逻辑代码中剥离出来,人们尝试对应用程序进行分,产生了最初的MVC模式。当今底MVC(本文称为MVC的变种)已经同经MVC大相径庭,由于藏MVC的某些特点并无抱如今之富客户端应用(后面会起说明),所以打某种意义上吧,经典MVC已经不复存在了,本文的叙述针对的是经典MVC。

2.2 经典MVC的干活流程

经典MVC根据职责将代码划分也老三个区域:Model(模型)、View(视图)、Controller(控制器)。不考虑特殊现象,大部分之做事流程是这样的:

图片 1

“经典MVC”

率先从M、V、C各自的天职说于:

  • Model:代表工作逻辑层,它无所谓表现层的有,只注意处理事情。
  • Controller:接受用户之输入,将输入转为相应的吩咐,执行更的操作。
  • View:向用户呈现展示的信,与M建立观察者模式,根据M的更动机关还渲染。

第一得说之是,不要因为浏览器的角度理解这流程,因为十分时代浏览器还未出现。一个完好无损的MVC的行事流程是这么的:

  1. 第一C接受用户的鼓舞。
  2. (流程①)C将这种刺激转化为某种命令去调用M的接口,对M执行更新操作。
  3. (流程②)M发送状态改变之打招呼给V(由观察者模式成功)。
  4. (流程③)V调用M的接口获取最新数据,重新渲染V(由观察者模式形成)。

从调用流程我们发现藏MVC有以下几独特色:

  1. C与V共同组成一个表现层,即一个UI组件,两者是心有余而力不足独立有的,所以没实质上之分开,这点及现时之MVC变种出老挺区别。
  2. C与V没有直接的调用关系,各自处理自己之工作。
  3. 引入观察者模式实现多少绑定,C没有直接更新V,而是去更新M,然后通过观察者模式对V进行翻新。由于一个M得本着承诺多单UI组件,当某个特定的C更新M时,会招连锁的大都个V同时创新,这对于开发复杂的用户界面非常有益。
  4. 遂将“表现层(C+V)”从“业务逻辑层(M)”剥离出去。

2.2 经典MVC的缺陷

2.2.1 观察者模式的短

观察者模式在叫开发者带来好之同时,也带动了一个题目,那就是是:很为难通过跟踪代码来获知程序的流程走向,这直接导致了次复杂度的加强,所以过多的利用观察者模式会使程序变的不错理解。

2.2.2 特殊表现层逻辑的两难位置

无时无刻用户对图形界面的渴求更为大,GUI变得进一步复杂,表现层的逻辑已经不仅仅是将M的数目直接展示到屏幕及那简单。我们需要对M的多少开展进一步的加工处理后才会展现于用户。经典MVC的一世,图形用户界面是非常简单的,所以MVC能满足大部分景的急需,就算出那相同略片段特别之显现层逻辑(M数据的加工处理),也为撂M里进行拍卖了,虽然污染了M的纯度,但是影响连无老。但是对当代之富客户端应用来说,这种“特殊表现层逻辑”是生巨大的,如果都填进M里,这明显是休能够承受之。

2.2.3 smalltalk的对策

据悉smalltalk-80
MVC的开发者也发觉及了MVC的短板,他们使用的政策是对V进行拓展,将V拓展为一个崭新的靶子,它既涵盖V的全部内容(包括替代V,与M建立观察者模式),又带有对M数据进行加工处理的逻辑代码,他们把这种新的靶子吃作:Presentation
Model。而立即整个的改观都是为了重新清的以“表现层”与“业务逻辑层”分离。

三、总结

经MVC总起来说有些许个举足轻重点:分离表现层、通过观察者模式展开数据并。虽然MVC已经不克满足当代富客户端应用的要求,但是它的一定量只重大点也叫袭了下,影响了扳平多级的MVC变种,比如MVP、MVVM等,而这些MVC变种也多亏为了满足富客户端的需进化而来,下篇文章介绍MVP与MVVM。

参考文献

<a
href=”https://en.m.wikipedia.org/wiki/Model–view–controller"&gt;wikipedia
Model-view-controller</a>
<a
href=”http://martinfowler.com/eaaDev/uiArchs.html\#ModelViewController"&gt;Martin
Fowler GUI Architectures</a>
<a href=”http://c2.com/cgi/wiki?ModelViewControllerHistory"&gt;Model
View Controller History</a>

相关文章