组合架构,做得正确:MVI 的单向状态与 MVVM 的比较

主要观点:

  • 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 合同稳定。
阅读 38
0 条评论