承接上一篇《MVP 实践:Presenter 的职责与回调地狱》,那一篇末尾列出了 MVP 的三个短板——状态不可表达、旋转重建、接口膨胀。这一篇引入 MVVM,重点讲两件事:MVVM 如何用「一个状态值」解决第一个短板,以及DataBinding 这条技术路线在其中的位置。
结论先行:MVVM 的核心贡献是引入「状态」这个一等概念;DataBinding 是实现这一点的工具之一,但不是唯一路径。很多人把 MVVM 和 DataBinding 绑定成一对,这会带来一个常见误判——以为不用 DataBinding 就不是 MVVM。
一、MVVM 相对 MVP 的三个改进
1.1 改进一:状态从「多个方法」变成「一个值」
MVP 里五种界面状态用五个方法表示,MVVM 用一个值表示:
// MVP:五个方法,状态靠组合推断 interface View { fun showLoading() fun showSuccess(data: Data) fun showEmpty() fun showError(msg: String) fun showExpired() } // MVVM:一个状态值,状态即数据 sealed interface UiState { data object Loading : UiState data class Success(val data: Data) : UiS