Android MVVM实践疑问:简单单行判断逻辑是否需要迁移到ViewModel?
关于Android MVVM架构下短逻辑的分层归属问题解答
结论
非常建议将该判断逻辑迁移到ViewModel中,即使只有单行判断,长期收益也远大于当下的重构成本,不建议将该逻辑保留在Activity中。
具体原因
- 这行判断属于核心业务规则,和View层无任何绑定:「未完成所有答题时触发退出流程、全部答完才进入结果生成页」是答题模块的通用业务规则,和Activity的视图渲染逻辑没有关联。后续如果业务调整,比如修改为「答够80%的题目即可直接生成结果」,你只需要修改ViewModel中的判断条件,不需要改动Activity的任何代码,也不会误触其他View相关逻辑。
- 可测试性提升幅度远大于改造投入:逻辑迁移到ViewModel后,你不需要启动Activity、不需要写instrumentation测试,只需要构造不同状态的
TestDTO实例调用finishTest()方法,断言testResult的值即可完成单元测试,测试成本极低。 - 重构成本几乎可以忽略:你设想的改造方案只需要新增一个
testResult的观察者,整体改动不超过20行代码,但是可以避免后续业务迭代中逻辑散落在多个View层导致的重复代码、修改漏同步等问题,长期收益明显。
低改造成本折中方案
如果暂时不想新增枚举状态的观察者,也可以先将判断逻辑提取为ViewModel的公共方法:
public boolean shouldLeaveTest(TestDTO test) { return getTotalAnsweredQuestions(test) != test.getQuestions().size(); }
Activity中直接调用该方法做分支判断即可,既把业务规则收拢到ViewModel层,又不需要改动现有逻辑结构,也符合MVVM的分层规范。
内容的提问来源于stack exchange,提问作者Diego Perez
相关产品推荐
相关产品推荐

