Android 架构最新进展 | MVI = 响应式编程 + 单向数据流 + 唯一可信数据源

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

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

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

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

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

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

唯一可信数据源

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

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

假唯一数据源

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

最初我是这样实现的:

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

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


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值