MVC
前端的 MVC 和后端类似,具有 View、Controller 和 Model。
Model:负责保存应用数据,与后端数据进行同步。
Controller:负责业务逻辑。
View:负责视图展示,将 Model 中的数据可视化出来。
这样的模型,在理论上是可行的。但往往在实际开发中,并不会这样操作。因为开发过程并不灵活。
例如,一个小小的事件操作,都必须经过这样一个过程,那么开发就不再便捷了。
MVP
既然有缺陷,就会有变革。在前端框架模式的演进中,似乎少了 MVP 这种模型,这是因为 Angular 早早的将 MVVM 框架模式带入了前端。MVP 模式虽然在前端开发中并不常见,但是在原生安卓开发中,开发者还是会考虑到它的。
MVP 和 MVC 很接近,P 指的是 Presenter,Presenter 可以理解为一个中间人,它负责着 View 和 Model 之间的数据流动,防止 View 和 Model 之间直接交流。我们可以看一下图示:
我们可以看到,Presenter 负责和 View 进行双向交互,还和 Model 进行双向交互。
这种交互方式,相较于 MVC 来说少了一些灵活,因为现在 View 和 Model 不能相互通信了。
好处是它分离了 View 和 Model。
缺点是应用逐渐变大之后,导致 Presenter 的体积增大,难以维护。
MVVM
ViewModel 通过实现一套数据响应式机制自动响应 Model 中数据变化,同时 ViewModel 会实现一套更新策略自动将数据变化转换为视图更新,通过事件监听响应 View 中用户交互修改 Model 中的数据。
这样在 ViewModel 中就减少了大量 DOM 操作代码。
MVVM 在保持 View 和 Model 松耦合的同时,还减少了维护它们关系的代码,使用户专注于业务逻辑,兼顾开发效率和可维护性。
总结
- 这三者都是框架模式,它们设计的目的都是为了解决 Model 和 View 的耦合问题。
-
MVP 是 MVC 的进化版,Presenter 作为中间层负责 View 和 Model 之间的通信,解决了两者的耦合问题,但 P 层过于臃肿会导致维护问题。
-
MVVM 模式在前端领域有广泛应用,它不仅解决了 View 和 Model 之间的耦合问题,还同时解决了维护两者映射关系的大量繁杂代码和 DOM 操纵代码,在提高开发效率、可读性同时还保持了优越的性能。