標籤:

保持數據一致性

在客戶端開發中,常常出現在當前界面刪除數據後,相關的界面需要同步的場景。雖然可以讓用戶手動刷新一次,但這樣的體驗畢竟不好,最好在刪除數據後所有界面都能馬上做出響應。500px 團隊前不久發布了一篇博客,就圍繞 Android 開發中的數據一致性展開了討論。

為了保持數據一致性,一般有三種實現方式:

  1. 定義介面,實現了介面的 View 可以相互之間通信;
  2. 使用全局的事件匯流排;
  3. 使用「發布/訂閱」系統。

定義並實現介面,雖然易於理解,並且將處理數據職責的相關 View 束縛在一定範圍內(相對於全局而言),但卻容易讓代碼臃腫、緊耦合。一個 View 只需要關心它自己的數據處理邏輯,對於其他 View 的狀態其實是不關心也不應該關心的,介面這種方式讓 View 多處理了本不該處理的事;並且在後續開發中,如果有新的 View 依賴加入,就要擴展之前的處理邏輯,很是麻煩。不建議採用。

全局的事件匯流排如 EventBus/RxBus/Otto 等,雖然讓代碼不太耦合了,但隨著需要處理的事件越來越多,事件也會變得越來越難管理,參考 Telegram 的消息中心實現。

最後來說說「訂閱/發布」系統。也許大家會覺得奇怪,為什麼 EventBus 這類實現不能歸類在這個系統里呢?寬泛來說確實應該屬於,但是在這裡我們要說的是基於數據改變的模式,而不是依靠自定義事件。某種程度上說類似於 MVVM ,相關 Model 改變了,對應的 View 也產生變化。目前看來這是保持數據唯一性最好的方式了。500px 團隊內部開發了名為 Jackie 的中心化數據發布/訂閱系統,在未來也有相關的開源計劃。不過話說回來,如果是讓你自己來實現這樣一套系統,你會怎麼做呢?

推薦閱讀:

紅米適合我嗎?
Android 系統的哪些特性或功能是 iOS 應該效仿的?
Facebook Home 發布後下載量慘淡,同時獲得大量差評,有哪些原因?
Android 的 Daydream 功能和 Windows 的屏保有什麼不同?
如果你是HTC的CEO,你會怎麼拯救HTC?

TAG:Android |