標籤:strong 代碼 on c r 設計 對象 tt 如何
最近在著手設計一個服務發布,治理的架構,參考了幾個主流架構的代碼,比如阿里的Dubbo,傳輸層的Netty,容器層的Tomcat等等,有一些體會。
經典的《物件導向分析與設計》一書中闡述了為什麼設計是按層次劃分的,種種好處自己去翻書,總結這麼多架構,有一些架構設計的基本模式可以抓住。
通用的設計,尤其是大型的架構可以分為4層:介面層,抽象層,流程實現與適配層,具體實現層。
介面層定義了整個架構所具備的功能,最好都用介面實現,不要用抽象類別。介面的擴充性優於抽象類別。Thrift採用了抽象類別來設計頂層的功能,後期想擴充其實挺難的。
關於介面層的設計有一些要點:
1. 介面的粒度要小,參考單一職責原則
2. 用一個較大的介面適配多個小介面,而不要設計一個大介面。小介面的擴充性優於大介面
3. 介面的設計只需要考慮要具備的功能,不需要考慮類的屬性,如何?等等,這些在抽象層和實現層擴充
抽象層定義了實現介面的抽象類別,都用抽象類別實現,主要的功能有:
1. 給介面提供預設實現
2. 提供新的抽象方法擴充介面
3. 給子類提供公用的屬性,方法
4. 比如定義調用的基本流程,這個在設計大型架構,底層採用第三方實現的時候尤其重要。參考模板模式
流程實現與適配層,這層採用普通類實現,繼承抽象層,主要的功能有:
1. 實現抽象層和介面層定義的抽象方法
2. 定義架構調用的具體流程
3. 如果底層採用第三方架構,那麼需要做適配和裝飾層,參考適配器模式和裝飾器模式
具體實現層,這層採用普通類實現,主要是實現具體的功能,但是不要參與到架構調用的流程。
這個4層結構是一個可擴充的,健壯的設計,介面層定義功能,抽象層和流程實現與適配層定義了架構調用的流程,具體實現層是可插拔的,可以採用多種實現。
實際的設計可以根據架構要實現的功能進行裁剪,比如不會有多種實現,就可以把3,4層合并。如果是像Dubbo這種底層支援多種傳輸層和協議層的架構,就需要完整的4層結構,並且需要好好設計抽象層和流程層,因為架構具體的流轉是在這兩層,只是涉及到底層時,才會調用具體的第三方實現。
關於軟體架構設計的一些思考--通用架構設計模式