Configuration Point in HiveMind

    配置擴展點是HiveMind的一個核心概念。當你擁有一系列服務之後,對這些服務進行配置就是很自然的了。在HiveMind裏,一個配置擴展點包含了一個無序元素的集合。其中的每個元素都是定義在某個模塊裏,另外每個模塊都可以爲一個對它可見的擴展點增加定義元素(HiveMind裏面把這種定義稱爲contribution)。
    服務擴展點(service point)和配置擴展點(configuration point)沒有直接的聯繫,所以服務和配置同名也是很常見的(這種同名可能是有意的或無意的;服務和配置擴展點使用的是不同的命名空間)。服務和配置擴展點的聯繫只有在代碼裏面才能體現,服務關聯了一個配置之後就可以隨意操作它裏面的所有元素。
    現在,HiveMind裏的配置擴展點可以是配置的數據是一個不可修改的List或一個不可修改的Map。區別這兩種模式的方法是通過指定關鍵屬性來區別,如果指定關鍵屬性則會使用這個屬性最爲主鍵。
    在系統啓動的時候配置擴展點的數據是不會生成的,在第一次引用配置擴展點的數據(List或Map)時纔會生成一個實際數據的代理。生成的代理結構和單例模式的代理模式很像,也分爲內外兩層。當實際訪問時內層代理會改變外層代理的內層代理屬性,使其指向實際的數據。和單例模式不同的是,配置擴展點生成的代理不是動態代碼生成的,而是一個已經編寫好的類。不動態生成的原因可能是因爲此處的代理只需要涉及List和Map兩種固定的類型,不需要根據運行時的情況動態的獲取類類型併爲其生成代理。下圖展示了代理的類結構。
configuration point
    下面以List的size方法爲例,通過連續兩次訪問該方法解釋代理如何實現延遲讀取的過程。
 configuration point sequence
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章