在 Android 开发中,架构设计不仅是代码组织的艺术,更是解决复杂业务逻辑、提高代码可维护性和可测试性的关键。随着 Android 生态的发展,主流架构模式经历了从 MVC 到 MVP,再到 MVVM 以及 Clean Architecture 的演变。理解这些模式的优缺点及其适用场景,是面试中被高频考察的重点。
1.1 MVC 模式:基础与局限
MVC (Model-View-Controller) 是早期的经典架构模式。在 Android 中,Activity 往往承担了 View 和 Controller 的双重角色,这导致了 Activity 臃肿的问题。Model 层负责数据逻辑,View 层负责 UI 展示,Controller 层负责逻辑控制。然而,由于 Android 的 View 系统(View 组)本身就是一个复杂的层级结构,很多时候 View 直接操作了 Model,或者 Controller 过于庞大,导致耦合度高。
1.2 MVP 模式:解耦的尝试
为了解决 MVC 中 View 和 Model 耦合的问题,MVP (Model-View-Presenter) 模式应运而生。在 MVP 中,View(通常是 Activity 或 Fragment)只负责 UI 展示和用户交互,所有的业务逻辑都移至 Presenter 层。View 和 Model 之间没有直接联系,它们通过接口进行通信。这种模式极大地提高了代码的可测试性,因为 Presenter 可以独立于 UI 进行单元测试。但缺点是会产生大量的接口,导致代码量增加。
1.3 MVVM 模式:数据驱动 UI
MVVM (Model-View-ViewModel) 是目前 Android 开发中最主流的架构模式,尤其是配合 Jetpack 组件使用时。MVVM 的核心在于 DataBinding 和 LiveData/Flow。View 层通过 DataBinding 或 Compose 直接观察 ViewModel 中的数据变化,当数据发生变化时,UI 自动更新。ViewModel 负责处理业务逻辑并暴露数据给 View,它不直接依赖 View,从而实现了更好的解耦。ViewModel 的生命周期与 Activity/Fragment 分离,能够有效地处理配置变更(如屏幕旋转)带来的数据丢失问题。
| 架构模式 | 核心特点 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| MVC | Activity 兼任 View/Controller | 简单直观,学习成本低 | Activity 臃肿,耦合度高 | 简单 Demo,小型项目 |
| MVP | Presenter 中间层,接口通信 | 逻辑与 UI 分离,易测试 | 接口繁多,代码量大 | 逻辑复杂,需高频测试的项目 |
| MVVM | 数据绑定,LiveData/Flow | 自动更新 UI,生命周期安全 | 调试困难,学习曲线较陡 | 中大型项目,现代 Android 开发 |