面试官问我:MVC、MVP和MVVM之间有啥区别?

18 阅读3分钟

MVC(Model-View-Controller)、MVP(Model-View-Presenter)和MVVM(Model-View-ViewModel)都是常见的软件架构模式,用于组织和管理应用程序的代码结构。它们之间的区别主要在于各自的责任分配和交互方式。

MVC(Model-View-Controller)模式:

  1. 模型(Model) :表示应用程序的数据和业务逻辑。模型负责管理数据的存储、检索、更新和删除等操作。
  2. 视图(View) :用户界面的表示层。视图负责将数据呈现给用户,并接收用户的输入。
  3. 控制器(Controller) :接受用户输入并作出相应的响应。控制器负责从视图中接收用户输入,更新模型的状态,并将更新后的数据传递给视图进行显示。

特点

  • 分离关注点,模型、视图和控制器之间相互独立,易于维护和测试。
  • 控制器充当中介者,负责接受用户输入和应用程序逻辑,但可能导致控制器逻辑复杂化。

MVP(Model-View-Presenter)模式:

  1. 模型(Model) :同MVC模式中的模型,负责数据和业务逻辑。
  2. 视图(View) :同MVC模式中的视图,负责呈现数据给用户。
  3. 展示者(Presenter) :负责控制用户界面的行为,接收视图的用户输入并处理,然后调用模型进行业务逻辑的处理,最后将处理结果反馈给视图。

特点

  • 视图和模型之间不存在直接联系,通过Presenter进行交互,降低了耦合度。
  • Presenter可以被多个视图共享,增强了代码的可重用性和可测试性。

MVVM(Model-View-ViewModel)模式:

  1. 模型(Model) :同MVC和MVP模式中的模型,负责数据和业务逻辑。
  2. 视图(View) :用户界面的表示层,负责呈现数据给用户。
  3. 视图模型(ViewModel) :连接视图和模型的中间层,负责处理视图的展示逻辑和用户交互,同时通过数据绑定将视图和模型之间的数据同步。

特点

  • 通过数据绑定技术,视图模型可以直接从模型中获取数据,并将数据绑定到视图上,当数据发生变化时,视图也会自动更新,简化了视图和模型之间的数据同步操作。
  • 视图模型中包含了视图的展示逻辑和用户交互处理逻辑,使得视图更加专注于界面呈现,降低了视图的复杂度。

区别总结:

  1. 责任分配

    • MVC:C负责处理用户输入和应用程序逻辑。
    • MVP:P负责处理用户输入和应用程序逻辑。
    • MVVM:VM负责处理视图的展示逻辑和用户交互,模型负责数据和业务逻辑。
  2. 数据绑定

    • MVC和MVP中,视图和模型之间的数据同步需要手动处理。
    • MVVM利用数据绑定技术,简化了视图和模型之间的数据同步操作。
  3. 视图复杂度

    • MVC和MVP中,视图可能包含一些展示逻辑和用户交互处理逻辑。
    • MVVM中,视图的复杂度相对较低,主要负责界面呈现,大部分逻辑都在ViewModel中处理。

一句话回答

本质就是C\P\VM层工作内容的不同,这些层是模型和视图分离的关键,随着这些层包揽的工作内容逐渐变多,模型层和视图层之间更加解耦完全,专注于自身工作。

MVC vs MVP:MVP视图不直接与模型交互,通过P层来更新模型和视图。

MVC vs MVVM:MVVM通过引入视图模型(VM)来进一步分离视图和控制器。在MVVM模式中,视图绑定到视图模型,而视图模型负责更新视图和模型。