<object id="sf5fs"></object><source id="sf5fs"><sub id="sf5fs"><ol id="sf5fs"></ol></sub></source>

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

      Compiled functions

      compiled repository的數據處理流程可以做到數據類型無關的(除了封裝的Result哈,ps:就是說泛型唄)。 在實踐中, 很常見的list數據處理(比如 RecyclerView中)。尤其像下面這種典型的從網絡下載list數據的處理流:

      1. 下載數據:byte[]類型;
      2. 將byte[]解析成數據對象;
      3. 從數據對象中讀取內容;
      4. 數據給UI層(比如 Adapter)展示前,對數據可以做一些轉換工作:對list進行and、or、sort等任何集合篩選操作;
      5. 將結果集(list)設置為Adapter的數據源。

      開發者也許想把前4步封裝成一個函數Function,這個叫做:a compiled repository,然后用一個 Updatable 作為repository的響應實現第5步, 為UI提供list數據。如果大多數子程序都單獨編寫UI模型轉換方法,勢必影響代碼可讀性 (比如:將領域模型數據轉換成UI模型數據)。

      Agera 為compiled repository提供了實用工具:編譯規模較小,可重用操作符,相同風格:

      // For type clarity only, the following are smaller, reused operators:
      Function<String, DataBlob> urlToBlob = …;
      Function<DataBlob, List<ItemBlob>> blobToItemBlobs = …;
      Predicate<ItemBlob> activeOnly = …;
      Function<ItemBlob, UiModel> itemBlobToUiModel = …;
      Function<List<UiModel>, List<UiModel>> sortByDateDesc = …;
      
      Function<String, List<UiModel>> urlToUiModels =
          Functions.functionFrom(String.class)
              .apply(urlToBlob)
              .unpack(blobToItemBlobs)
              .filter(activeOnly)
              .map(itemBlobToUiModel)
              .morph(sortByDateDesc)
              .thenLimit(5);

      所謂_reused_是指 operator背后的邏輯部分在別的地方需要使用到, 并且只需要一小點工作就可以包裝成有用的operator接口。此外,如果超過Function/Predicate的函數定義(ps:相對復雜的函數),更要使用function compiler, 要比簡單寫一個自定義的Function好的多,已經發生的開銷 (編譯時間:編譯附加的類的時間;運行時時間:加載、創建、鏈接這些類的時間)。使用function compiler可以有效減少代碼行。

      function編譯器對應的編譯器狀態,定義在FunctionCompilerStates 接口中。 就像使用 [[repository compiler|Compiled-repositories]], 編譯function的表達式是不能中間中斷的.

      日韩一区二区三区无码免费视频 日本高清视频永久网站www 国产精品天天看 国产美女精品自在线拍免费
      <object id="sf5fs"></object><source id="sf5fs"><sub id="sf5fs"><ol id="sf5fs"></ol></sub></source>