Android MVI 设计模式(2)

为了更好地理解 MVI 设计模式,需要拿出一些时间来说一说什么是状态,以及我们如何设计状态。因为在 MVI 设计模式一切是建立在状态的基础上的。现在家里装修都会安装双控开关,在不同位置都可以开灯和关灯。就是很好示例,开关的功能根据灯泡的开关状态不同而具有不同的功能。

Android MVI 设计模式(2)_第1张图片

有关状态和状态转换的理解,一直以来是让我挠头一件事,在程序设计时,说的头头是道,但是实际应用却痛苦不堪,如何设计好状态管理是对能否开发出好的程序起着的至关重要因素。今天我静下心来研究一下状态管理,包括表述状态,如何实现从一个状态转换为另一个状态,如何序列化这些状态。

我们先看一看如何表述状态,如果在没语境的情况下,被莫名其妙问道对与错(true 或 false),可能就是一脸懵逼。如果我给出前提(他们都叫 context 为上下文),如果问黑镜电视剧好看不?这时候每个人就可以给出自己答案了。所以我们定义状态是又上下文,他一定是回答一定问题的答案。

如果我们被问到油条大王几点开门时,我们 true 和 false 回答也是没有意义的。

先说一说如何使用 bool 值来描述状态,如果仅给出 bool = true 来表示状态,这是不可取的,我们是不知道这里 true 代表什么,是什么问题答案。我们需要 true 和 false 背后的故事,什么时候是 true 以及 true 代表了什么。而且我们每次被问到相同问题时,答案都在这个范围内。

下面列举 3 示例来定义布尔值时,如何对 bool 进行说明这 bool 值意义,1 我们通过注释来说明,2 通过定一个变量,用变量名解释这个 bool 值得意义。

Android MVI 设计模式(2)_第2张图片

不过我们还能做的更好,假如我们通过注释来描述状态,每次新的需求来了,都需要更改代码同时还要维护我们注释。我们每次更改状态时都需要重新写注释。这样做不是什么好的策略。


Android MVI 设计模式(2)_第3张图片

看一看下面代码,我们定义了一个状态为 headerAdded 为 bool 型,我们读一读下面代码,如果 headerAdded 已经添加了,如果 itemCount 为 0 就去掉 header 让后将 headerAdded 设置为 false。否则更新更新 header 的条目数量信息。如果没有添加 header 并且 itemCount 大于 0 我们需要创建,更新 header  的itemCount  其实我们可以分析一下,只要有条目就有header 如果没有条目自然也就没有header

Android MVI 设计模式(2)_第4张图片

其实我们这里只关心列表是否为空就。所以写成下面这样。

Android MVI 设计模式(2)_第5张图片

使用字符串类型定义我们状态就好像在走钢丝。想象一下,让我们能输入两个任意的字母,这样的组合,aa ab ac ...zz 会有多少,学过排列组合应该不难理解 676。那我们错误概率又是多少呢?可想而知。

Android MVI 设计模式(2)_第6张图片


Android MVI 设计模式(2)_第7张图片
字符串来描述状态

如果字符串为上图,那么可能性就不可预见了,出错的概率也是极高的。那么我们使用 String 就需要注意两点,也是使用 String 两个基本原则,1 是同一个 String 我们只可以用一次。有了上面的铺垫应该不难理解了吧。就是避免误输入造成的错误。

你可能感兴趣的:(Android MVI 设计模式(2))