XCoreRedux框架:Android UI组件化与Redux实践
@author: 莫川 https://github.com/nuptboyzhb/
XCoreRedux源码+Demo:https://github.com/nuptboyzhb/XCoreRedux
使用android studio打开该项目。
目录结构
- demo
基于xcore框架写的一个小demo - xcore
XCoreRedux核心代码库 - pics
文档的pic资源
前言
- Android开发当中的Code Architecture思考
最近看了很多前端的框架,React、Flux、Redux等,React和Redux都是前端比较流行的框架。而android方面,Google官方貌似不太Care此事,业内也没有公认的优秀Architecture。与前端类似,在Android开发中,同样也面临着复杂的数据state管理的问题。在理解Store、Reducer和Action的基础上,最终,基于Redux+React的思想,提出了一个基于Android平台Redux框架,我给它起名叫作:XCoreRedux。本仓库就是XCoreRedux+UIComponent框架的实现。它表达的是一种思想,希望大家能够提出更好的意见。
XCoreRedux框架介绍
与前端的Redux框架类似,XCoreRedux框架的图示如下:
Action
Action 是把数据传到 store 的有效载体。它是store的唯一数据来源。我们一般是通过 store.dispatch()将action传到store中。Action一般需要两个参数:type类型和data数据。在XCoreRedux框架下,我们定义Action如下:
public class XCoreAction {
//Action的类型
public final String type;
//Action携带的value,可为空
public final Object value;
public XCoreAction(String type, Object value) {
this.type = type;
this.value = value;
}
public XCoreAction(String type) {
this(type, null);
}
@Override
public boolean equals(Object object) {
...
}
@Override
public int hashCode() {
...
}
}
为了统一的管理Action,你可以实现一个ActionCreator,比如,demo中创建了一个联系人业务的Creator:
/**
* @version mochuan.zhb on 16/9/28.
* @Author Zheng Haibo
* @Blog github.com/nuptboyzhb
* @Company Alibaba Group
* @Description 联系人 ActionCreator
*/
public class ContactsActionCreator {
public static final String ADD_ITEM = "AddContacts";
public static final String ADD_TITLE = "addCategory";
public static final String DELETE_LAST = "deleteLast";
public static final String CHECK_BOX = "contactsCheck";
public static XCoreAction addContacts(Contacts contacts) {
return new XCoreAction(ADD_ITEM, contacts);
}
public static XCoreAction addCategory(Title title) {
return new XCoreAction(ADD_TITLE, title);
}
public static XCoreAction deleteLast() {
return new XCoreAction(DELETE_LAST);
}
public static XCoreAction checkBoxClick(ContactsWrapper contactsWrapper) {
return new XCoreAction(CHECK_BOX, contactsWrapper);
}
}
Action的概念比较好理解,下面我们看一下Reducer
Reducer
reducer的字面意思就是“减速器”。Action描述了事件,Reducer是决定如何根据Action更新状态(state),而这正是reducer要做的事情。Reducer的接口定义如下: