<wbr id="jl7f7"></wbr>

        <i id="jl7f7"></i>
          <acronym id="jl7f7"></acronym>

          <s id="jl7f7"></s>

          <ins id="jl7f7"></ins><button id="jl7f7"><strong id="jl7f7"></strong></button>
          鍍金池/ 教程/ 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的數據處理流程可以做到數據類(lèi)型無(wú)關(guān)的(除了封裝的Result哈,ps:就是說(shuō)泛型唄)。 在實(shí)踐中, 很常見(jiàn)的list數據處理(比如 RecyclerView中)。尤其像下面這種典型的從網(wǎng)絡(luò )下載list數據的處理流:

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

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

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

          // 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背后的邏輯部分在別的地方需要使用到, 并且只需要一小點(diǎn)工作就可以包裝成有用的operator接口。此外,如果超過(guò)Function/Predicate的函數定義(ps:相對復雜的函數),更要使用function compiler, 要比簡(jiǎn)單寫(xiě)一個(gè)自定義的Function好的多,已經(jīng)發(fā)生的開(kāi)銷(xiāo) (編譯時(shí)間:編譯附加的類(lèi)的時(shí)間;運行時(shí)時(shí)間:加載、創(chuàng )建、鏈接這些類(lèi)的時(shí)間)。使用function compiler可以有效減少代碼行。

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

          日韩性做爰免费a片aa片,天天躁恨恨躁夜躁2020,精品久久综合1区2区3区激情,精产国品一二三产品麻豆

          <wbr id="jl7f7"></wbr>

                <i id="jl7f7"></i>
                  <acronym id="jl7f7"></acronym>

                  <s id="jl7f7"></s>

                  <ins id="jl7f7"></ins><button id="jl7f7"><strong id="jl7f7"></strong></button>