主要观点:
- MVVM 与 Compose 不匹配,存在分散状态、“SingleLiveEvent”问题、隐式写入和测试脆弱等痛点。
- MVI 提供单向数据流,包括意图(事件)、归约器、状态和效果,能解决 MVVM 的问题。
- MVI 与 Compose 契合良好,有单一数据源、可预测的重组、显式效果、可测试性和可追溯性等优点。
- 可以通过在现有代码库中采用 State + Events + Effects 和归约器式更新的模式进行从 MVVM 到 MVI-ish 的迁移。
- 给出了性能和人体工程学方面的技巧,如保持状态小而值类型化等。
- 介绍了 MVI 方式的测试方法,包括归约器测试、效果测试和集成测试。
- 讨论了何时可以继续使用 MVVM,以及如果需要可以采用的库。
关键信息:
- MVVM 与 Compose 的不匹配点及 MVI 的特点。
- 从 MVVM 到 MVI-ish 的迁移模式代码。
- 性能和测试相关的技巧与方法。
- 不同情况下选择 MVVM 或 MVI 的考量。
重要细节:
- MVVM 中多个
LiveData/Flows独立突变,Compose 重组时机奇怪,需用remember { mutableStateOf(...) }修补。 - MVI 中通过归约器将
(oldState, event)转为newState,并可发出Effect。 - 在 MVI-ish 迁移中,
ViewModel作为归约器和效果发射器,UiState驱动屏幕,视图层通过onEvent反馈。 - 性能技巧包括保持状态小、按功能拆分、明智使用键等。
- 测试方法包括归约器测试、效果测试和集成测试。
- 若屏幕小或团队已用特定 MVVM 模式,可不采用 MVI 重写。
- 可自行编写或采用轻量级 MVI 辅助库,保持 State/Event/Effect 合同稳定。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。