成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Facebook移動架構:Android Flux架構詳解

開發 架構
要為Android應用找到一個好的架構不是一件容易的事情。谷歌似乎不太在乎這個事情,因此在設計模式上,除了Activity 生命周期管理之外,再也沒有官方的推薦。

要為Android應用找到一個好的架構不是一件容易的事情。谷歌似乎不太在乎這個事情,因此在設計模式上,除了Activity 生命周期管理之外,再也沒有官方的推薦。

但是,為你的應用打造一個架構是非常重要的。不管你是否喜歡,任何應用最終都會有一個架構。因此你***是成為一個架構的奠基人,而不是等著它出現。

今天: Clean Architecture

目前的趨勢是采用Uncle Bob在2012年對web應用提出的建議: Clean Architecture

但是我發現Clean Architecture對于絕大多數安卓應用來說都有點過度設計了。

通常移動應用要比web應用的生命短。移動端技術的發展太快,以至于今天發行的app可能在一年后已經完全過時。

移動應用所做的事情很少。絕大多數的用例都只是數據信息流的消費。從API獲取數據,顯示數據給用戶,很少有輸入與寫入。

所以它的業務邏輯并不復雜。至少不如后端一樣的復雜。雖然你要處理很多平臺上的問題:內存,存儲,暫停,恢復,網絡,定位等等,但是這些都不是業務邏輯。所有app都有這些東西。

因此,絕大多數app似乎都無法從類似于復雜的分層或者工作執行優先級隊列中獲益。

他們也許只是需要一種組織代碼的簡單方式,能高效的一起工作,更容易的發現bug。

Flux 架構介紹

Flux 架構 被Facebook使用來構建他們的客戶端web應用。跟Clean Architecture一樣,它不是為移動應用設計的,但是它的特性和簡單可以讓我們很好的在安卓項目中采用。

安卓中的Flux架構

要理解Flux,有兩個關鍵的特點

  • 數據流總是單向的一個單向的數據流 是 Flux 架構的核心,也是它簡單易學的原因。就如下面討論的,在進行應用測試的時候,它提供了非常大的幫助。

  • 應用被分成三個主要部分:

    • View: 應用的界面。這里創建響應用戶操作的action。

    • Dispatcher: 中心樞紐,傳遞所有的action,負責把它們運達每個Store。

    • Store: 維護一個特定application domain的狀態。它們根據當前狀態響應action,執行業務邏輯,同時在完成的時候發出一個change事件。這個事件用于view更新其界面。

這三個部分都是通過Action來通信的:一個簡單的基本對象,以類型來區分,包含了和操作相關的數據。

Flux Android 架構

在Android開發中使用Flux設計規范的目的是建立一個在簡單性與易擴展易測試之間都比較平衡的架構。

***步是找到Flux元素和安卓app組件之間的映射。

其中兩個元素非常容易找到與實現。

  • View: Activity o或者Fragment

  • Dispatcher: 一個事件總線( event bus),在我的例子中將使用Otto,但是其它任何實現都應該是ok的。

Actions

Actions也不復雜。它們的實現和POJO一樣簡單,有兩個主要屬性:

  • Type: 一個String,定義了事件的類型。

  • Data: 一個map,裝載了本次操作。

比如,一個顯示用戶詳情的典型action如下:

Bundle data = new Bundle(); 
data.put("USER_ID", id); 
Action action = new ViewAction("SHOW_USER", data);

Stores

這可能是Flux理論中最難的部分。

如果你之前使用過Clean Architecture,你可能難以接受。因為Stores承擔了原本被分成多層的責任Stores包含了application的狀態與它的業務邏輯。它們類似于rich data models但是可以管理多個對象的狀態,而不僅僅是一個對象。

Stores響應Dispatcher發出的Action,執行業務邏輯并發送change事件。

Stores的唯一輸出是這單一的事件:change。其它對Store內部狀態感興趣的組件必須監聽這個事件,同時使用它獲取需要的數據。

系統中不再需要任何其它組建去了解application的任何狀態信息。

***,stores必須對外公開一個獲取application狀態的接口。這樣,view元素可以查詢Stores然后相應的更新UI。

安卓中的Flux架構

比如,在一個Pub Discovery App 中,SearchStore被用來跟蹤被搜索的item,搜索結果以及搜索歷史。在同一個應用中,一個ReviewedStore同樣包含了瀏覽pub的列表以及必要的邏輯比如根據review排序。

但是有一個重要的概念需要記住:Stores并不是倉庫。它們的職責不是從一個外部源(API或者數據庫)獲取數據,而是跟蹤actions提供的數據。

那么,Flux application是如何獲得數據的呢?

網絡請求與異步調用

在***幅Flux示意圖中我有意跳過了一部分:網絡調用。接下來的示意圖完善***幅圖并添加了更多細節:

安卓中的Flux架構

異步網絡調用是被一個Actions Creator觸發的。一個Network 適配器完成相應API的異步調用并且返回結果給Actions Creator。

最終Actions Creator分發帶有返回數據的相應類型的Action。

把所有網絡工作和異步工作獨立于Stores之外有兩個主要的優點:

  • 你的Stores是完全同步的:這讓Store中的邏輯更容易跟蹤。Bug也更容易跟蹤。同時,因為所有的狀態變化都是同步的,那么Store的測試變會的非常簡單:啟動actions然后等待期望的結果。

  • 所有的action都是從一個Action Creator觸發的:在一處單一的點創建與發起所有用戶操作可以大大簡化尋找錯誤的過程。忘掉在多個類中尋找某個操作的源頭吧 ,所有的事情都是在這里發生的。同時,因為異步調用發生在這之前,所有來自于ActionCreator的東西都是同步的。這大大提高了代碼的可跟蹤與可 測試性。

演示代碼:To-Do應用

在這個例子中,你將看到一個使用Flux架構的典型的To-Do應用。

我讓項目盡量簡單,只演示這個架構如何能夠產生組織良好的app。

對于實現的一些評價:

  • Dispatcher的實現是通過Otto Bus。但是幾乎任何bus都是可以的。Flux架構本身在事件上有一定限制,我在這里沒有采用。原本Flux的定義中,前一個事件沒有完成之前就開始分發下一個事件是不允許的,會拋出一個異常。為了讓項目簡單,我沒有采用。

  • 有一個ActionsCreator類幫助創建Action,并把它們post給Dispatcher。這在Flux中時相當普遍的模式,可以讓事情變的有序。

  • Actions類型只是String常量。也許這不是***的實現,但是它快速并且有助于事情的簡單化。

同樣的還有Actions數據:它們只是以String類型為key,Object為值的HashMap。這會導致Stores中轉換成實際數據的時候發生丑陋的類型轉換。而且顯然這也不是類型安全的,但這也是為了讓我們的例子更好理解。

總結

在安卓應用中其實不存在***架構的說法。不過存在適合你當前app的***架構。這個架構可以讓你和團隊其他成員協作起來更輕松,按時完成項目,盡可能的保持高質量與較少的bug。

我相信Flux對于以上提到的特點都有很好的支持。

源碼

https://github.com/lgvalle/android-flux-todo-app

擴展閱讀:

感謝

特別感謝我們的同事Michele Bertoli 花時間向我介紹Flux與校對這篇文章。

責任編輯:王雪燕 來源: jcodecraeer
相關推薦

2016-08-31 09:58:55

JavascriptFlux架構

2011-04-26 09:18:53

FacebookPHPmysql

2012-05-03 11:07:37

Facebook

2009-05-13 09:10:59

Facebook存儲基礎架構照片應用程序

2010-07-26 13:44:49

Facebook移動應用軟件

2013-01-09 09:33:33

WLANWi-Fi移動通信

2017-02-27 09:36:01

AndroidMVVM架構

2012-05-16 09:59:30

OpenStack架構

2012-10-08 10:08:45

移動WebFacebookAndroid

2010-11-05 13:44:55

移動支付平臺Facebook

2011-12-01 14:32:13

Facebook數據中基礎架構

2017-07-17 15:19:10

MVVM模式iOS開發MVP

2013-09-03 10:22:02

人人網移動開發架構

2013-09-03 10:10:00

人人網移動開發架構

2011-10-10 09:11:09

Java

2024-07-31 08:33:17

2011-05-12 10:59:50

Facebook移動設備

2009-03-24 08:44:40

GoogleAndroid移動OS

2013-04-11 10:23:07

2011-03-24 11:10:21

Facebook社交網絡運營商
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线看免费 | 粉嫩一区二区三区四区公司1 | 天天射视频 | 国内精品一区二区 | 精品国产免费人成在线观看 | 成人免费观看视频 | 羞羞色在线观看 | 一本一道久久a久久精品蜜桃 | 色婷婷亚洲一区二区三区 | 国产精品久久久久久久久免费桃花 | 欧美激情在线观看一区二区三区 | 久久影院一区 | 成人网视频 | 午夜免费福利片 | 午夜视频在线 | 日韩一区二区成人 | 国产精品电影在线观看 | 亚洲 中文 欧美 日韩 在线观看 | 精久久久| 亚洲aⅴ | 日韩精品一区二区三区在线观看 | 亚洲在线视频 | 精品国产一二三区 | 天天久久| 日日日视频 | 四虎成人精品永久免费av九九 | 国产精品一区二区三区免费观看 | 国产h视频 | 日韩在线小视频 | 欧美成人免费电影 | 亚洲三区视频 | 精品少妇一区二区三区日产乱码 | 国产在线精品一区二区 | 2019天天干天天操 | 男女午夜激情视频 | 欧美一级欧美一级在线播放 | 久久久久国产一区二区三区 | 国产精品欧美一区二区 | 成人欧美一区二区三区黑人孕妇 | 日日日日日日bbbbb视频 | 福利视频大全 |