鍍金池/ 教程/ Android/ Repositories
Custom observables
Compiled functions
Reactive programming
Reservoirs and parallelism
Incrementally Agerifying legacy code
Observables and updatables
Compiled repositories
Repositories

Repositories

如[上一篇所講, Repository是一個被觀察者(Observable),可以提供數(shù)據(jù),還可以定義在提供數(shù)據(jù)發(fā)生變化時的事件。

獲取數(shù)據(jù)方法:Repository.get().

簡單的 repositories

簡單的repository可以使用Repositories類中的工具方法來創(chuàng)建。
有如下選擇:

  • static repository:提供相同的數(shù)據(jù)源而且不生成通知事件,只有get()方法;
  • mutable repository:可提供變化的數(shù)據(jù)源(accept輸入->get輸出),數(shù)據(jù)變化時生成通知事件(依賴方法Object.equals(Object)).

本質(zhì)上說,簡單的repository總是提供最新數(shù)據(jù),不論它們是否被激活。

private void setUpRepository() {

    mRepository = Repositories.repository(object);
    // or
    mRepository = Repositories.mutableRepository(object);
}

復雜的 repositories

復雜的數(shù)據(jù)倉庫(Repository)可以響應其他數(shù)據(jù)倉庫(Repositories)、任意被觀察者(Observables)(也可以是該Repository的事件), 并把從其他數(shù)據(jù)源獲取的數(shù)據(jù)經(jīng)過同步或者異步內(nèi)部轉(zhuǎn)換處理后作為數(shù)據(jù)倉庫(Repository)的產(chǎn)出值。

從響應事件中數(shù)據(jù)倉庫(Repository)的數(shù)據(jù)提供者總保持數(shù)據(jù)最新的,但由于處理的復雜性,在數(shù)據(jù)倉庫(Repository)不活動時,可以選擇不保持數(shù)據(jù)為最新的。

任何數(shù)據(jù)消費者都需要通過注冊觀察者(Updatable)來表示自己需要讀取數(shù)據(jù)的意圖。

數(shù)據(jù)倉庫(Repository)進入活動狀態(tài),但數(shù)據(jù)不用立即更新,消費者看到的數(shù)據(jù)仍然是舊的,直到數(shù)據(jù)倉庫(Repository)分發(fā)第一個事件。

Agera 提供了repository compiler類,幫助以接近自然語言的表達式來聲明、實現(xiàn)復雜的數(shù)據(jù)倉庫(Repository)。