上次介绍了单向数据流的结构,这次来简单讨论下单向数据流的应用场景。
特性
单向数据流从设计模式上看,应用了大量的命令模式,而命令模式的特定是行为通过命令来驱动,也就是说我们可以缓存命令,或者mock命令,来驱动整个流程和模块。
这就诞生了一个非常有意思的插件,录像功能。这里的录像并不是指的是用户的行为,而且录制整个app的行为。由于所有命令都会经过store,那么可以在中间件中设置一个序列化功能,将所有动作都记录下来,这样我们就可以回溯用户的操作了,比如在crash的时候。有些crash分析会去录制屏幕,来看用户当前操作,但是这样只能查看用户的操作,并不能恢复现场,往往我们去复现的时候,就没有问题了,因为数据以及不一样了。但是通过录制Action的方式录制的行为,数据也会一并被录制,这样就能完全的恢复现场了。
同时利用上述特性,我们还能跟踪用户行为。这里的跟踪就不仅仅是简单的用户事件统计了,而是把用户一连串的行为都记录下来,形成一个完整的流程。虽然这样做目前来说,还没有太大的意义,但是引入机器学习之后,对于用户推荐和喜好可能会有比较大的意义。
可以灵活的替换中间件,来处理一些额外的逻辑。比如上述的记录功能。
回溯功能
在React中,有个工具React-Dev-Tools,他就是按照这种思路来做的。当你发生错误时,你可能回退几步操作,等功能修复好了,直接热部署,就可以进行接下去的操作。这都是依赖了记录Redux内部Action行为。iOS由于自己的原因实现热部署可能会有点困难,但是依然可以利用这种特性来做一些记录。
应用
那么现实情况,我们可以在什么场景下按照这种思路进行开发呢?
首先,这种方式是一种及其繁琐的形式,而且也不是一种非常主流的模式,在应用之前必须考虑到这点,并且考虑到团队内对于这种方式的接受程度,理解程度,不然可能会变得更糟。
其次,应用范围。我们有必要整体的使用吗?在目前的大部分开发中,都是敏捷开发和数据展示,使用这种方式反而显得累赘了。所以我认为,在某些场合下可以考虑使用这种模式:
- 模块间相互影响,且交互复杂
- 较高层面,处于整个app层面的,比如router系统