1.1.5 服務是可組合的
組合指的是兩個或多個事物相互合作,構成一個更復雜的事物,這個更復雜的事物一般具有更強大的功能,能提供單個事物不能提供的功能。20世紀80年代有一部很受歡迎的美國動畫片“變形金剛”,片中分為正邪兩派,分別為汽車人和霸天虎。它們作為個體都是具有強大的功能,但是更厲害之處在于,它們可以全體組合,從而構成一個無敵的巨無霸。汽車人組合成的大力金剛比它們作為個體的威力更大。這里當然要有一個前提,那就是這些汽車人是可以組合的,在設計時就要考慮到這個因素。
同樣對服務而言,可組合性也是一個很重要的特點。通過服務之間的組合,可以構建新的服務,這個新的服務能完成單個服務不能完成的任務,滿足用戶特定的需求。同時通過服務的組合,也得到不同粒度的服務。基本服務粒度相對比較細,組合得到的服務則為粗粒度的服務。如圖1-1所示,服務1,2,3組合得到一個組合的服務。

圖1-1 服務的組合
在面向對象的方法中,對象之間的組合是通過關系、aggregation及composition來實現的,使用UML可以對這些不同的組合建模。在具體實現時,組合是通過編程來實現的,這樣得到的系統有一個致命的缺點,它的對象組合的代碼和對象實現的代碼是混在一起的,不能分開。如果新的需求要求的僅僅是組合代碼的改變,它將導致整個代碼的變動。在面向服務的架構中,則避免了這一點。服務的組合是使用一種標準的語言來描述,和服務的實現分開,這樣在僅僅需要組合的邏輯發生改變時,對服務并沒有任何影響,從而減少了工作量,降低了開發成本,實現了對服務最大程度的使用。
在面向服務的架構中主要有兩種形式的組合,即Orchestration和Chereography。二者的主要區別在于可執行性和控制模式。Orchestration定義了可執行的流程,流程和外界信息交換的順序由Orchestration來集中控制。Chereography則只是點對點交換的協議,僅僅定義了合法的信息交換順序,進行信息交換的雙方是平等的,并不存在一個進行集中控制的服務。通過這種方式定義的流程一般是不可執行的,而是存在多種實現,只要它們滿足定義好的合法的信息交換順序就可以。Chereography當然可以用Orchestration來實現。二者都有對應的規范,Orchestration為Web Services Business Process Execution Language(WSBPEL)規范,Chereography則為Web Services Chereography Description Language(WSCDL)規范。
- Web Application Development with R Using Shiny(Second Edition)
- PySide GUI Application Development(Second Edition)
- Mastering KnockoutJS
- 大數據分析與應用實戰:統計機器學習之數據導向編程
- App Inventor創意趣味編程進階
- Raspberry Pi Robotic Blueprints
- Unity Character Animation with Mecanim
- Apache Solr PHP Integration
- Mastering OAuth 2.0
- Python硬件編程實戰
- Python Automation Cookbook
- Building Microservices with Go
- Azure for Architects
- HTML5 Boilerplate Web Development
- Java王者歸來:從入門邁向高手