恩...新的项目使用的是 Flux搭建的,最近正在熟悉代码..
看过的并不算是掌握,还是写出来试试吧...
以 账号登陆作为例子...
1.登陆按钮按键监听.获取账号密码,分别进行 正则等系列判断...
创建 账号模块的ActionsCreator...
然后 调用该Action:
ActionsCreator.getInstance().login(LoginActivity.this, mobile, password);
2.ActionsCreator内Action方法的创建.....
public void login(MyBaseActivity activity, String mobile, String password) {
LoginBean bean = new LoginBean();
bean.mobile = mobile;
bean.password = RSAUtils.encryptedCode(activity, password);
activity.addRequest(activity.getService(LoginApiService.class).getLogin(bean),
new BaseCallBack<LoginModel>() {
@Override
public void onSuccess200(LoginModel model) {
mDispatcher.dispatch(new LoginSuccessAction(model));
}
});
}
调用封装好的 BaseActivity内的 addRequest方法,有1个参数,2个参数和4个参数...
恩,使用2个参数.分别是call和callback
call参数,使用retrofit对需要进行联网操作的封装在对应的ApiService类内...
将ActionsCreator传递过来的信息...也就是 账号,密码进行封装,封装在bean里面...
交给retrofit进行联网操作...
返回Simplecall...和返回结果...
callback根据需求调用BaseCallback或者SimpleCallback......
3.返回success后...
调用APP内唯一的 Dispatcher...对整个Action进行调度...
Dispatcher的dispatch方法内调用 EventBus,将该Action发送给所有的订阅者...
4.dispatch发送出去的Action,继承自BaseAction...
该Action内包含retrofit请求成功的结果...
5.在第3步...dispatch将该Action通过EventBus将Action发送给所有订阅者...
对应的创建账号模块的Store...也就是LoginStore
该Store继承自BaseStore,对Dispatcher进行了订阅...
接收到来自 dispatch发送过来的Action..
因为该Action内包含retrofit请求成功后的结果...
在store里面对该结果进行处理...
处理完成后,封装在Event里面,再通过EventBus发送给订阅该store的View,也就是UI
6.从View内将需求通过ActionsCreator传递给Dispatcher...
ActionsCreator内该Action通过retrofit对联网操作进行处理,返回call
然后将call的结果封装成Action通过Dispathcer内的EventBus传递给所有订阅的Store
Store内拿到该Action,对其进行处理,
然后将View需要的结果封装成继承自BaseEvent的event内...
再通过继承自BaseStore,绑定的Dispatcher的方法,EventBus将该event发送给View
最后View拿到event的结果...
走完一个完整的流程...
整个APP对应的:
1个Dispatcher
多个与需求功能模块相对应的ActionsCreator和Store
通过EventBus对数据进行传递
数据传递是单向的
附上Flux官方框架图:
恩,最后不得不说一句,mac真心好用.......