【架构模式】 - MVC,MVP,MVVM
MVC(Model–view–controller)
MVC模式应该是开发者最熟悉的模式,它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
核心
MVC 将应用程序划分为三个部分:
Model(模型)
- 负责处理业务逻辑和数据存储。
- 与数据库交互、执行数据验证、处理业务规则等。
View(视图)
- 负责用户界面(UI)的展示。
- 渲染数据、接收用户输入(如表单提交)。
Controller(控制器)
- 作为 Model 和 View 的“中介”,处理用户输入并协调两者的交互。
- 接收请求、调用 Model 处理数据、更新 View。
MVC 的工作流程
- 用户通过 View 触发事件(如点击按钮、提交表单)。
- Controller 接收请求,调用 Model 处理业务逻辑。
- Model 处理完成后,将结果返回给 Controller。
- Controller 根据结果更新 View,完成界面渲染。
主要缺点
个人认为MVC模式对于现代开发最大的缺点是视图(View)和控制器(Controller)的耦合性比较大,对于需求经常变动的现代开发来说,高耦合带来很多工作量。
MVP(Model-View-Presenter)
MVP模式是电脑软件设计工程中一种对针对MVC模式,再审议后所延伸提出的一种软件设计模式。
核心
MVP模式将应用程序分为三个核心组件:
Model(模型层)
- 负责处理数据逻辑和业务规则(如网络请求、数据库操作、数据缓存等)。
- 与View完全解耦,专注于数据的获取和处理。
View(视图层)
- 负责UI的展示和用户交互(如按钮点击、界面渲染等)。
- 不直接处理业务逻辑,所有操作通过Presenter间接完成。
Presenter(表示层)
- 作为Model和View的“桥梁”,协调两者之间的通信。
- 接收View的输入事件,调用Model处理数据,并将结果返回给View。
关键区别(与MVC对比):
在MVC模式中,View和Model直接交互,而MVP通过Presenter强制解耦View和Model。这种设计使得View和Model之间完全独立,降低了代码的耦合度。
MVP的工作流程
用户交互
- 用户在View上进行操作(如点击按钮、输入文本)。
- View将事件传递给Presenter。
Presenter处理逻辑
- Presenter接收事件后,调用Model层处理业务逻辑(如验证用户输入、请求数据)。
- Model层完成数据处理后,将结果返回给Presenter。
更新View
- Presenter根据Model的结果,调用View的接口方法更新UI(如显示加载状态、展示数据)。
主要缺点
个人认为MVP的缺点是引入Presenter层后,会额外增加接口和类,如果业务比较复杂,会比较难以维护
MVVM(Model-View-ViewModel)
写本篇博客的原因就是因为看到了MVVM(为了这碟醋包饺子了属于是),MVVM通过分离关注点和数据绑定机制,显著提升了代码的可维护性、可测试性和开发效率。
核心
MVVM 模式由三个核心组件构成:
Model(模型)
Model 负责管理应用程序的数据和业务逻辑,与用户界面无关。它通常包含数据访问层(如数据库操作)和业务规则(如数据验证)。Model 是独立于视图和 ViewModel 的,可以在多个应用或平台中复用。View(视图)
View 是用户界面的展示层,负责渲染 UI 元素(如按钮、文本框等)。View 通过数据绑定与 ViewModel 交互,无需直接操作 Model,从而实现 UI 与业务逻辑的解耦。ViewModel(视图模型)
ViewModel 是 MVVM 的核心桥梁,负责将 Model 的数据转换为 View 可用的形式,并处理用户交互逻辑。ViewModel 通过双向数据绑定(Two-way Data Binding)与 View 同步状态,确保数据变更能自动反映在 UI 上,反之亦然。
数据绑定机制
MVVM 的核心优势在于其数据绑定能力。View 和 ViewModel 之间的数据绑定是自动化的,开发者无需手动更新 UI 或修改数据。例如:
- 当 Model 中的数据发生变化时,ViewModel 会自动更新,View 也随之刷新。
- 当用户在 View 中输入数据时,ViewModel 会实时捕获这些变化,并更新 Model。
主要缺点
个人认为主要缺点是性能上的开销,要维护数据绑定和双向同步,但是在需求变更较大的场景下,这也是比较友好的,还有就是调试起来会麻烦一些。
参考链接
- 标题: 【架构模式】 - MVC,MVP,MVVM
- 作者: 宋
- 创建于 : 2023-09-25 22:16:55
- 更新于 : 2024-12-15 19:59:19
- 链接: https://sxl-space.tk/2023/09/25/005_Architectural-Pattern/
- 版权声明: 版权所有 © 宋,禁止转载。