MVVM架构分为M(Model)、V(View)、VM(ViewModel)三个部分,他们分别处理自己的分工,在View
和Model
之间使用ViewModel
作为中介者,使View
和Model
不受业务逻辑影响。
Model(数据模型):
代表应用程序的数据源,它可以是从数据库、网络请求或其他来源获取的数据。Model 通常是不包含任何视图和逻辑的纯数据对象。
View(视图):
代表应用程序的用户界面,通常由各种 Flutter Widgets 构成。View 负责展示数据和与用户进行交互,但不包含任何业务逻辑。
ViewModel(视图模型):
作为 View 和 Model 之间的桥梁,负责处理 View 的状态和用户的交互,并根据业务逻辑从 Model 中获取数据。ViewModel 通常包含状态管理、数据处理、业务逻辑和与数据层的交互等功能。
MVVM 优点:
-
分离关注点:MVVM模式可以很好地将应用程序的逻辑(ViewModel)与界面(View)进行分离,在开发过程中更容易维护和测试。
-
可测试性:ViewModel 是纯逻辑的部分,不依赖于具体的 UI 组件,因此可以使用单元测试来测试 ViewModel 的行为和对数据的处理。
-
数据绑定:MVVM 模式通过数据绑定实现了 View 和 ViewModel 的自动同步。当 ViewModel 中的数据发生变化时,View 会自动更新,这简化了数据更新的处理,同时提高了开发效率。
-
松耦合:ViewModel 不依赖于具体的 View 实现,可以在不同的平台和技术栈中重用,提高了代码的可重用性。
MVVM 缺点:
-
学习成本:MVVM 是一种高级的架构模式,相对于传统的 MVC 或 MVP 模式,学习和理解 MVVM 需要花费一定的时间和精力。
-
过度设计:在小型项目中,使用 MVVM 可能会导致过度设计,增加了不必要的复杂性。MVVM 适用于复杂的业务逻辑和大型应用程序。
-
数据流管理:在 MVVM 中,数据流的管理可能会变得复杂。如果不妥善管理数据流,可能会导致数据流混乱和性能问题。
MVVM的5主要类:
Service: 网络请求类
Model: 主要负责转换模型
View: 主要负责呈现UI,通过ViewModel获取数据并展示
Widgets: 单独的UI模块分离
ViewModel: 处理业务逻辑,将数据绑定给View展示