資料中介者 --- 核心思想(java/android)

LightSun發表於2017-11-17

Data-Mediator 核心工作流圖

資料中介者 --- 核心思想(java/android)

概念

  • 資料中介者是一個強大的資料層框架(其實業務互動的一切皆可為資料), 該框架利用編譯時註解,外掛等技術。解決資料層的維護麻煩的問題。 以及支援強大的特性。
  • 資料中介者的核心思想實際上就是代理和中介(兩者的思想有類似).
    • 代理:
      相信大部分人都知道在程式設計中經常都會用到代理技術,比如AOP動態代理。但是他不具備通用性,需要為特定的物件寫對應的封裝。(java可以用cglib, android 可以用dexmarker處理), 甚至java還有對應的agent技術(非ClassLoader技術,一般j2ee或者寫外掛才用),可以在編譯時/執行時改變位元組碼。
    • 中介者:
      實際上跟我們買房子的中介, 買東西的商店是類似的。 中介者可以減少使用者的時間和互動成本。 設想一下如果我們買房子都只找業主,當然會直接點,但是你要跑的流程,手續會很多。還得了解相關的法律知識。 又設想下如果我們買東西都去找生產商或者批發商。 你得跑多遠去買東西... . 在程式中有種設計模式就叫中介者模式, 思想實際上是一樣的。
  • 所以本框架的核心思想:
    • 1), 用註解生成模型(data-module),
    • 2), 用中介者和資料實現(data-impl), 資料代理(data-proxy)互動。通過通用的回撥達到我們想要的目的。
    • 3), 繫結器Binder 和 資料繫結的註解 都是基於中介者來實現的。
  • 涉及的物件及說明.
    • data-module: 資料模型(介面型別), 由手動寫的@Fields註解以及intellij外掛輔助生成。
    • data-impl : 資料模型的實現. 編譯時註解生成。
    • data-proxy: 資料的代理, 編譯時註解生成. 使用時由DataMediator獲取。
    • data-mediator: 資料中介者,代表物件DataMediator. 由DataMediatorFactory工廠建立生成。
    • Proyperty Callback 屬性回撥。通過DataMediator可註冊與反註冊,以便監聽屬性變化。後面的binder和DataBinding 均是基於此。 代表物件DataMediatorCallback.
    • Binder 繫結器, 基於DataMediator演化而來的物件,主要是用於資料和ui介面元素的繫結, 達到每次運算元據即是操作ui的效果。原理是基於Proyperty Callback.
    • Data-Binding 代表物件DataBinding. 所有需要資料繫結物件的基類。用於協助註解式的資料繫結,可完美搭配butterknife.

特性

  • 1, 支援監聽屬性變化(List, SparseArray 結構同樣支援)
  • 2, 自動生成get/is/set, hashCode, equals,toString 方法。 並且可以根據flags快速調整. 支援copy等額外介面。
  • 3, 支援鏈式程式設計
 DataMediator<Student> mediator = DataMediatorFactory.createDataMediator(Student.class);
        //資料代理層
        mediator.getDataProxy()
                .setName(null)
                .setAge(0)
                .setId(0);

        //資料真正的模型實現
        mediator.getData().setName(null)
                .setAge(0)
                .setId(0);
複製程式碼
  • 4, 支援Serializable 和 parcelable資料的序列化. 可以根據欄位flag調整。
  • 5,完整支援Google/Gson註解
  • 6, 支援資料繫結, 並且可以完美搭配BukkerKnife.
  • 7, 支援對資料模型增加自定義方法和常量,自然支援實現自定義介面。
  • 8, 支援資料快取。
  • 9,支援資料模型之間的依賴或繼承
  • 10,外掛支援。
    • 'data-mediator-intellij-plugin' 用於生成資料模型介面的方法.
    • 'data-mediator-convertor-intellij-plugin' 用於將java bean轉化為基本的資料模型.
    • android lint 支援.
    compile 'com.heaven7.android.data.mediator.lint:dmlint:1.2'
    複製程式碼

學習路徑

相關demo或教程.

想要體驗最新的特性 ?

請到github/data-mediator體驗。 如果覺得不錯,請star支援下專案哈。

歡迎大家star, fork,contribute ,提issue. 它會越來越棒。

Thanks for reading !

技術源於分享!

相關文章