上一篇《企業 SOA 設計(1)–ESB 設計》中,寫到咱們的 SOA 設計分爲兩個層面來進行:一個是系統間的 SOA 設計,主要經過 ESB 來完成;另外一方面則是單個應用系統內部的 SOA 設計,本篇將會就後者進行詳細說明。html
平臺總體結構數據庫
在產品開發過程當中,爲了達到業務級別的較大粒度重用,咱們須要把縱向把業務進行拆分,以業務組件的形式進行開發,並最終把多個開發完成的業務組件進行組合,造成最終的軟件產品。架構
按照組件化開發的產品,是基於一個公共的產品開發平臺來創建的。由平臺來提供全部的底層設施。平臺包括技術平臺和業務平臺兩個層面。在技術層面上,平臺提供了一系列的類庫、框架、組件、工具,以及爲業務組件化提供相應的技術支撐。在業務層面上,業務平臺中積累了大量的封裝完善的業務組件,以及一些經常使用的業務控件,以供開發新產品時進行選配。同時,平臺還爲整個軟件過程提供一系列的其它支持,例如工具、設計器、管理界面等。框架
下圖,是平臺的總體結構圖:分佈式
圖中羅列了大部分的關鍵組成部分,細節本篇不述。工具
組件集成平臺組件化
對於一個獨立的業務,咱們能夠將其封裝爲一個獨立的業務組件,並最終放到組件庫中。業務組件之間,則以服務、事件兩種形式進行交互。要支持這種模式的交互,技術平臺還須要提供幾個技術框架:插件平臺、服務容器、事件總線。spa
下圖是組件集成架構:插件
產品構成架構設計
下圖是一個完整產品的組件構成圖:
因爲咱們的產品開發平臺必需要支持 721 客戶化定製,因此同一個業務組件還對應不一樣的業務通用級別進行劃分:Organization Common 表示組織架構組件最通用的部分,Org Part1 表示組織架構組件的可選包。而 Customiztion 則能夠對引用的業務組件作深刻的定製和擴展,而不需修改引用組件的代碼。
能夠看到,對於整個產品來講,在引用了業務組件庫中的一些業務組件後,就能夠組成了產品的基礎功能。Customer App Component 中是應用系統在組件的功能基礎上須要再作的工做:完成產品的額外功能,並經過平臺接口爲一些組件作相關定製。
組件內部架構
對於單個的業務組件,其內部的架構依然採用領域驅動的分層架構:
圖雖大,但並不複雜,就是領域驅動的經典分層:Distribute(DTO 接口層)、Application(應用層/領域邏輯層)、Repository(倉庫)、Domain(領域實體)。
重點在於 Domain 包,它不但包括領域實體,還包括了組件事件、組件服務接口,這些都是領域的核心。
位於底層的技術平臺,提供一系列支持:IOC/AOP、屬性擴展框架、領域實體框架、721定製化框架、數據庫生成框架等……
結尾
其實,組件化架構設計中,最爲複雜是分析出一個封裝無缺的組件,所要面向的使用者是哪些,這些使用者分別對組件有哪些需求,而這個架構如何知足這一系列需求。例如,咱們在設計過程當中,對這些方面進行了分析:組件自身的發展需求、組件中各組成部分的可擴展性、組件間的交互需求、系統集成需求、項目組定製化需求、系統外交互需求、易用性。
歡迎感興趣的朋友交流。