当前位置:   article > 正文

Android 架构最新进展 | MVI = 响应式编程 + 单向数据流 + 唯一可信数据源_android mvi开发框架实战

android mvi开发框架实战

MVI 是Model-View-Intent的简称,它们分别表示。。。。。

我并不打算逐个字母介绍它们代表的意思。因为这样一点也不能增进对 MVI 的理解,反而会对它的认识蒙上厚厚的一层迷雾。

奥古斯都在《忏悔录》里面问我这样一个问题:“时间到底是什么?你不问我的时候,我是知道的;你一问我,我就不知道了。”

把“时间”换成“MVI”,这个问题同样困扰着我:“MVI 到底是什么?你不问我的时候,我是知道的;你一问我,我就不知道了。”

维特根斯坦会说,上面是一个非法的问题,源于错误地使用了语言。

正确的问题应该是这样问的:人们在什么场景下使用 MVI,他们是怎么使用 MVI 的?他们为什么会使用 MVI?

唯一可信数据源

请原谅我,还是使用了这么拗口的一个名词作为本节的开始。

会试着从日常开发中熟悉的场景出发,一步步演绎出什么叫“唯一”,什么叫“可信”。

假唯一数据源

假设下面这个场景: “一个可以发帖的社区界面,未加入社区时发帖按钮是置灰不能点击的,当以版主身份进入社区时发帖按钮是红色,当被禁言后按钮变黑。”

最初我是这样实现的:

  1. class CommunityActivity : AppCompatActivity() {
  2. private val postBtn: Button
  3. override fun onCreate(savedInstanceState: Bundle?) {
  4. super.onCreate(savedInstanceState)
  5. val userInfo = viewModel.getUserInfo() // 从服务器获取的用户身份状态信息
  6. postBtn.apply {...} // 初始化发帖按钮
  7. }
  8. override fun onEnter(identity: Identity) {
  9. postBtn.apply {...} // 加入社区后刷新发帖按钮(依赖 Identity)
  10. }
  11. override fun onExit() {
  12. postBtn.apply {...} // 退出社区后刷新发帖按钮
  13. }
  14. override fun onMute(mute: Mute) {
  15. postBtn.apply {...} // 禁言后刷新发帖按钮 (依赖 Mute)
  16. }
  17. }
  18. 复制代码

这样写对于功能实现来说没毛病,但维护起来会很头痛,因为一个控件的更新逻辑散落在 Activity 的各个地方,并且更新控件所依赖的数据是五花八门的,即未做到依赖单一数据源。界面简单还好,若复杂界面中有十几个这样的控件,Activity 的代码没法看。


 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号