引言:从'能跑就行'到'优雅可维'——架构即工程文明
站在 2025 年回望,Android 开发已走过近二十年。从早期'Activity 即一切'的野蛮生长,到如今以 Jetpack Compose + Kotlin Coroutines + Clean Architecture 为核心的现代开发范式,应用架构的演进不仅是技术的升级,更是工程思维的成熟。
在这条演进之路上,MVC、MVP、MVVM 三大模式如同三座里程碑,分别代表了 Android 社区在不同阶段对关注点分离(Separation of Concerns)、可测试性(Testability) 和状态管理(State Management) 的探索与突破。今天,我们不仅回顾它们'是什么',更要理解它们'为何而来'、'因何而去',以及它们如何共同塑造了今日 Android 开发的底层逻辑。
第一章:混沌之初 —— '上帝类'的技术债深渊
在架构意识尚未觉醒的年代,一个典型的 MainActivity 往往集万千职责于一身:
- 通过
findViewById操作 UI 控件; - 直接发起 OkHttp 网络请求;
- 使用 Room 或 SQLiteOpenHelper 操作数据库;
- 在
onCreate()中处理业务逻辑分支; - 在
onActivityResult()中解析 Intent 数据; - 甚至内嵌
AsyncTask处理异步任务……
这种'上帝类'模式看似高效,实则埋下巨大隐患:
| 问题维度 | 具体表现 |
|---|---|
| 高耦合 | UI、网络、DB、业务逻辑全部交织,修改一处可能引发连锁崩溃 |
| 不可测试 | 业务逻辑强依赖 Context、Activity 等 Android SDK 类型,无法脱离设备运行单元测试 |
| 状态脆弱 | 屏幕旋转导致 Activity 重建,未妥善保存的数据(如网络加载中的状态)瞬间丢失 |
| 维护地狱 | 单文件超 2000 行代码,新人接手需数周才能理清逻辑 |
正是这种'开发快、维护慢、测试难'的恶性循环,催生了对架构模式的迫切需求。而第一个被引入的,便是软件工程的经典范式——MVC。
第二章:MVC(Model-View-Controller)——理想很丰满,现实很骨感
1. 理论模型 vs Android 实现
MVC 的核心在于三者职责分离:
- Model:封装数据与业务规则(如 User、Repository)。
- View:纯展示层(XML 布局)。
- Controller:协调输入与输出(接收点击 → 调用 Model → 更新 View)。
但在 Android 中,没有独立的 Controller。Activity / Fragment 被迫同时承担 View(UI 渲染) 和 Controller(事件处理) 双重角色:
+------------------+
| Model | ←→ (数据)
+------------------+
↑
| (调用/回调)
+-------------------------------+
| Activity/Fragment (V + C) |
| - () |
| - () |
| - () { |
| model(); |
| (); |
| } |
+-------------------------------+
↑
| (布局引用)
+------------------+
| XML Layout | ← (View)
+------------------+


