最近在项目里实践了一把redux框架,有些感受记录一下。
框架的实现使用这个库Reductor: Redux for Android,
之前各种说java不适合用redux,但是亲自上手后,感觉这个库已经把大部分问题都解决了。
下面说重点
以数据为核心的开发思路
之前的开发方式,很大程度上我们专注于业务流程的实现,
一个功能的实现,我们会考虑功能中包含的业务逻辑,业务流程,
思考的方式是界面上有什么东西,点击按钮会触发什么逻辑,然后走什么流程,最后提交服务器,返回之后,又怎么刷新界面。
当我们想象应用运行时,其实看的是应用包含的流程,复杂的应用就会产生不同流程的耦合,逻辑越来越复杂
而使用redux,我们需要专注于如何设计数据,用以表达应用。
一个功能,首先要思考它有哪些数据,用最小的数据,表达它的所有状态,
然后思考什么样的操作或者业务流程会产生什么样的数据变化,
最后思考什么样的数据产生什么样的界面。
当我们想象应用运行时,我们看到的是应用的数据,是静态的,不管多复杂的业务逻辑,都转化为对数据的改变。
redux开发的合适顺序
设计store,用最少的数据集完整的表达应用
设计action,理清楚应用都有哪些产生数据变化的事件
设计reducer,实现在不同action下,数据如何变化
实现view,根据数据展示view,根据view的操作和业务流程发送action
其它一些细节
数据应该使用不变量,集合可以使用pcollection,其他数据结构可以使用kotlin的 data class,或者google的AutoValue(我用的kotlin)
json直接转不变量目前没有方案
action应该设计的尽量业务含义清晰,因为数据的变化是由于action带来的,如果action的业务含义不清晰,就很难理解应用到底发生了什么
像loading状态这种view的状态,不要放到store里,应该在流程中用回调的方式控制
注意action发送、reducer处理、数据变化监听都是在一个线程里,一般都在主线程,所以发送action的时候都要在主线程
通过Middleware可以实现异步action,从而达到业务逻辑和view解耦