<menu id="yymgu"></menu>
  • <menu id="yymgu"><menu id="yymgu"></menu></menu>
    <menu id="yymgu"></menu>
  • <xmp id="yymgu"><tt id="yymgu"></tt>
    鍍金池/ 教程/ Android/ Repositories
    Custom observables
    Compiled functions
    Reactive programming
    Reservoirs and parallelism
    Incrementally Agerifying legacy code
    Observables and updatables
    Compiled repositories
    Repositories

    Repositories

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

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

    簡單的 repositories

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

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

    本質上說,簡單的repository總是提供最新數據,不論它們是否被激活。

    private void setUpRepository() {
    
        mRepository = Repositories.repository(object);
        // or
        mRepository = Repositories.mutableRepository(object);
    }

    復雜的 repositories

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

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

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

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

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