架構設計知識梳理(2) Flux

1、概述

Flux.png
Flux的特色:

  • 數據是單向的
  • App被分爲三個部分 ViewApp界面,它根據用戶交互創造相應的響應ActionDispatcher:處理中心,接收各類Action並路由到對應的StoreStore:維護App各個模塊的數據狀態,他們會根據當前的動做Action處理不一樣的業務狀態,會產生一個change事件來通知View更新狀態。
  • Action是一個簡單的Java對象,包含typedata

2、Action

TypeString類型標示事件類型。 DataMap類型,攜帶這個動做須要的數據。bash

Bundler data = new Bundle();
data.put("USER_ID", id);
Action action = new ViewAction("SHOW_USER", data);
複製代碼

3、Store

Store模塊包含了App狀態和業務邏輯,它能管理各類對象的狀態而不是一個。 Store必須暴露一個接口來獲取App狀態,這樣View模塊就能夠訪問Store模塊來更新UI網絡

Flux Store.png
Store的職責不是用來從外部獲取數據,而是用來跟蹤經過 Action獲取的數據。

4、網絡請求和異步回調

異步網絡請求是經過Action Creator觸發的,API Adapter模塊負責請求API並返回結果,最後Action Creator會把相應的Action和數據發送出去。 Store徹底是同步模型,這樣使Store的內部邏輯更簡單。 全部的Action都是經過Action Creator觸發的,把全部的Action都集中在一個地方,容易排查bug異步

5、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對象,它提供了registerunRegister,並經過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()
複製代碼
相關文章
相關標籤/搜索