MVC
什么是MVC?
MVC(Model–View–Controller)
是最常见的客户端软件架构之一,它历史悠久,简单好用,易于理解.
前端的MVC与后端类似,具备着View、Controller和Model
- Model 负责保存应用数据、与后端数据进行同步。
- View 负责视图展示,将 Model 中的数据可视化出来。
- Controller 负责业务逻辑,根据用户行为对 Model 数据进行修改。
三者形成了一个如图所示的模型:
这样的模型,在理论上是可行的。但往往在实际开发中,并不会这样操作。因为开发过程并不灵活。例如,一个小小的事件操作,都必须经过这样的一个流程,那么开发就不再便捷了。
在实际场景中,我们往往会看到另一种模式,如图:
这种模式在开发中更加的灵活,backbone.js框架就是这种的模式。
但是,这种灵活可能导致严重的问题:
- 数据流混乱。如下图:
- View比较庞大,而Controller比较单薄:由于很多的开发者都会在view中写一些逻辑代码,逐渐的就导致view中的内容越来越庞大,而controller变得越来越单薄。
既然有缺陷,就会有变革。前端的变化中,似乎少了MVP的这种模式,是因为Angular早早地将MVVM框架模式带入了前端。MVP模式虽然前端开发并不常见,但是在安卓等原生开发中,开发者还是会考虑到它。
MVC的优缺点缺点
优点
耦合性低;
重用性高;
部署快;
可维护性高;
有利于软件工程化管理。
缺点:
不适合小型中等规模的应用程序;
增加了系统结果和实现的复杂性;
View和Model之间不匹配,用户界面和流程要考虑易用性,用户体验优化同时考虑业务流程的精确和无错。 Controler和Model之间界线不清,什么样的逻辑是界面逻辑,什么样的逻辑是业务逻辑,很难定义清楚。没有明确的定义;
View的变化不能完全由Model控制,即Observer模式不足以支持复杂的用户交互。这其实要求VC之间要有依赖。牵一发而动全身,数据,显示不分离,Controller,Model联系过于紧密。
为什么出现MVVM模式
MVC 架构模式虽然符合软件架构的分层思想,但是不适合小型,中等规模的应用程序。 随着H5 的不断发展,人们更希望使用H5开发的应用能和Native媲美,或者接近于原生App的体验效果,于是前端应用的复杂程度已不同往日,今非昔比。这时前端开发就暴露出了三个痛点问题:
开发者在代码中大量调用相同的 DOM API, 处理繁琐 ,操作冗余,使得代码难以维护。
大量的DOM 操作使页面渲染性能降低,加载速度变慢,影响用户体验。
当 Model 频繁发生变化,开发者需要主动更新到View ;当用户的操作导致 View 发生变化,开发者同样需要将变化的数据同步到Model 中,这样的工作不仅繁琐,而且很难维护复杂多变的数据状态。
其实,早期jquery 的出现就是为了前端能更简洁的操作DOM 而设计的,但它只解决了第一个问题,另外两个问题始终伴随着前端一直存在。