架构模式(architectural pattern)
- 是一门专门的学问,用来设计一个程序的结构。属于编程方法论。
- 以下讨论的 MVC、MVP、MVVM都是架构模式。
MVC (Model-View-Controller)
- 后端分层开发的概念
- Model(模型层):操作数据。
- View(视图层):提供用户交互的界面,是程序的外壳。
- Controller(控制层):业务逻辑层,负责业务逻辑的处理。根据“View层”的输入指令,操作“Model层”的数据。
- 通信方向:(操作)View → Controller → Model → View (实绩应用中也有直接操作Controller层等情况)
- 每层相互独立,内部变化不影响外部。对外提供接口(Interface)进行通信。
- 实现模块化,降低代码之间的耦合性。从而提升开发效率和代码的可维护性。
MVP (Model-View-Presenter)
- 后端分层开发的概念
- Model(模型层):操作数据。
- View(视图层):提供用户交互的界面,是程序的外壳。
- Presenter(控制层):业务逻辑层,负责业务逻辑的处理。根据“View层”的输入指令,操作“Model层”的数据。或者根据“Model层”变化改变“View层”。
- 通信方向(各部分间的通信都是双向的):View ↔ Presenter ↔ Model
- View 与 Model 不发生联系,都是通过Presenter传递。
- View 非常轻,不部署任何业务逻辑,称为“被动视图(Passive View),即没有任何主动性,而Presenter非常重,所有的业务逻辑都部署在那里。
与 MVC 的对比
- 区别
- 在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。
- 优点
- 1、模型与视图完全分离,我们可以修改视图而不影响模型
- 2、可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部
- 3、我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。
- 4、如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)
- 缺点
- 1、视图和Presenter的交互会过于频繁。
- 2、如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么Presenter也需要变更了。比如说,原本用来呈现Html的Presenter需要用于呈现Pdf,那么Presenter很有可能也需要变更。
MVVM
- 前端开发的分层概念,将MVP中的 Presenter 改名为 ViewModel,基本上与MVP模式完全一样。
- 通信方向:View ↔ Presenter ↔ Model
- 与 MVP 的区别是,它采用双向数据绑定(data-binding):View的变动,自动反应到ViewModel,反之亦然。
MVC & MVVM 图解
参考资料
[https://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html]