MVC、MVP 以及 MVVM 之间的区别

架构模式(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]

posted @ 2021-03-22 15:35  Better-HTQ  阅读(166)  评论(0编辑  收藏  举报