Android架构模式深度解析:MVC、MVP与MVVM的演进与选型

743 阅读2分钟

一、MVC(Model-View-Controller):经典的Android架构

在传统的 Android 开发中,MVC(Model-View-Controller)模式是默认的架构。

  • Model:数据层,负责处理数据和业务逻辑。
  • View:UI 层,由 XML 布局文件表示。
  • ControllerActivityFragment,它同时承担了 ViewController 的职责,负责处理用户输入、更新 View 和管理 Model

1. 局限性

  • 强耦合Activity 既包含 UI 逻辑,又包含业务逻辑,导致代码臃肿、难以维护。
  • 可测试性差:业务逻辑与 Android 生命周期和 UI 绑定,难以进行单元测试。

二、MVP(Model-View-Presenter):解耦的初步尝试

为了解决 MVC 的强耦合问题,MVP(Model-View-Presenter)将业务逻辑从 Activity 中剥离,转移到 Presenter

  • Model:数据层,与 Presenter 交互。
  • ViewActivityFragment,它只负责显示 UI 和将用户输入传递给 PresenterView 通过接口与 Presenter 通信。
  • Presenter:业务逻辑层,它持有 ViewModel 的引用,负责协调它们之间的交互。

1. 优势与挑战

  • 解耦Presenter 不依赖于 Android 框架,可以轻松进行单元测试。

  • 挑战

    • 接口膨胀PresenterView 之间的通信需要定义大量的接口方法。
    • 生命周期管理Presenter 需要手动与 View 进行绑定和解绑,以避免内存泄漏。

三、MVVM(Model-View-ViewModel):数据驱动的现代化架构

MVVM(Model-View-ViewModel)是 Google 官方推荐的架构模式,它通过数据绑定实现了 ViewViewModel 的自动同步。

  • Model:数据层,负责处理数据和业务逻辑。
  • View:UI 层(ActivityFragment),它只负责显示 UI,不包含业务逻辑。
  • ViewModel:持有 View 所需的数据和业务逻辑,通过可观察的数据(如 LiveDataStateFlow)将数据暴露给 View

1. 核心优势

  • 数据驱动View 监听 ViewModel 的数据变化,并自动刷新 UI。这减少了手动操作 View 的代码。
  • 生命周期感知ViewModel 的生命周期长于 Activity,它在配置变更时不会被销毁。LiveData 也具备生命周期感知能力,避免了内存泄漏。
  • 可测试性高ViewModel 独立于 Android 框架,可以轻松进行单元测试。

四、架构选型与实践建议

维度MVCMVPMVVM
职责分离最高
可测试性
代码量
适用场景简单界面中型项目大型复杂项目
系统支持较差较差Jetpack组件

结论

MVVM 模式通过数据驱动生命周期感知,解决了传统架构模式的痛点,是构建健壮、可维护 Android 应用的首选。