Flux
的特色:
App
被分爲三個部分 View
:App
界面,它根據用戶交互創造相應的響應Action
。 Dispatcher
:處理中心,接收各類Action
並路由到對應的Store
。 Store
:維護App
各個模塊的數據狀態,他們會根據當前的動做Action
處理不一樣的業務狀態,會產生一個change
事件來通知View
更新狀態。Action
是一個簡單的Java
對象,包含type
和data
。Action
Type
:String
類型標示事件類型。 Data
:Map
類型,攜帶這個動做須要的數據。bash
Bundler data = new Bundle();
data.put("USER_ID", id);
Action action = new ViewAction("SHOW_USER", data);
複製代碼
Store
Store
模塊包含了App
狀態和業務邏輯,它能管理各類對象的狀態而不是一個。 Store
必須暴露一個接口來獲取App
狀態,這樣View
模塊就能夠訪問Store
模塊來更新UI
。 網絡
Store
的職責不是用來從外部獲取數據,而是用來跟蹤經過
Action
獲取的數據。
異步網絡請求是經過Action Creator
觸發的,API Adapter
模塊負責請求API
並返回結果,最後Action Creator
會把相應的Action
和數據發送出去。 Store
徹底是同步模型,這樣使Store
的內部邏輯更簡單。 全部的Action
都是經過Action Creator
觸發的,把全部的Action
都集中在一個地方,容易排查bug
。異步
Todo App
源碼1.1 actions/Action
:一個Action
對應一個事件,而且包含了該事件相關聯的數據。 1.2 actions/ActionCreator
:這是一個單例模式,他構造時須要傳入一個Dispatcher
對象,封裝一些方法,並經過Dispatcher
分發出去。post
public static ActionCreator get(Dispatcher dispatcher) { //ActionCreator和Dispatcher相似,都是單例模式。
if (instance == null) {
instance = new ActionCreator(dispatcher);
}
return instance;
}
public void create(String text) {
dispatcher.dispatch(TodoActions.TODO_CREATE, TodoActions.KET_TEXT, text);
}
複製代碼
1.3 actions/TodoActions
:封裝Action
相關的常量。ui
dispatcher/Dispatcher
:這也是一個單例模式,他構造時須要傳入一個Bus
對象,它提供了register
和unRegister
,並經過bus
發送出去。spa
//構造時和Bus相關聯。
public static Dispatcher get(Bus bus) {
if (instance == null) {
instance = new Dispatcher(bus);
}
return instance;
}
複製代碼
model/Todo
:表示一個事件。 stores/Store
:它是一個接口,一樣和Dispatcher
相關聯,他的子類是TodoStore
。 整個數據流的流程是:code
Activity發起事件 -> ActionCreator#xxx -> Dispatcher#dispatch -> Bus#post -> TodoStore#onAction -> TodoStore#emitChange -> Bus#post -> Activity#onTodoStoreChange
複製代碼
Activity
接收數據的流程對象
Activity#onTodoStoreChange -> updateUi -> TodoStore#getTodos()
複製代碼