注意這一節(jié)標以“面向服務與面向對象”,有別于“比較面向服務與面向對象”。
區(qū)別在于所強調的事實:在這兩個思想派別之間不必是競爭關系。
事實上,面向對象編程被普遍用于有
Web
服務內構建封裝應用邏輯。然而,面向對象編程方法論在基本上與面向服務有何,這值得探究。對它們差異的理解會有助于你的工作。
下面列出這些設計方法方面的比較。(然而面向服務是基于服務的設計,面向對象是圍繞對象的創(chuàng)建為核心。為了避免服務和對象間的比較混亂,使用了“處理邏輯單元”這一術語。)
l
面向服務強調處理邏輯(服務)單元間的松散耦合。盡管面向對象支持創(chuàng)建復用性、松耦合的編程例程,它們多數(shù)是以預先定義的類依賴為基礎,結果導致了更多處理邏輯(對象)的緊密綁定。
l
面向服務鼓勵不優(yōu)雅的接口(服務描述)以便于每個通信(消息)包含盡可能多的信息以便于工作完成指定任務。面向對象編程充分支持精確的接口(
API
)以便通信(
RPC
或本地
API
調用)單元能夠執(zhí)行不同規(guī)模的任務。
l
面向服務期待顯著改變處理邏輯單元(服務)的作用域。面向對象處理邏輯(
objects
)趨于使其作用域更小且更有針對性。
l
面向服務促進活動未知的處理邏輯單元(服務)的創(chuàng)建,從而驅動通信單元(消息)的智能化。面向對象鼓勵處理邏輯數(shù)據(jù)的綁定,產生了高度智能化的單元(對象)。
l
面向服務偏愛處理邏輯單元
(服務)被設計成盡可能無狀態(tài)。面向對象促進數(shù)據(jù)與邏輯的綁定,導致更具狀態(tài)的單元(對象)。(然而,最近基于構件的設計方法偏離了這一趨勢。)
l
面向服務支持組合松散耦合的處理邏輯單元(服務)。面向對象支持組合但也鼓勵處理邏輯單元(
objects
)間的繼承,這會導致緊耦合。
你或許已經注意到我們避免提及特定的面向對象原則,比如封裝、繼承及聚合。因為我們還不會充分描述面向服務的原則,我們在這一層次上給出個別的比較范例。以后將
詳細解釋個別的面向服務原則,然后
再繼續(xù)這一討論。
要點總結
-
SOA
從根本上源自客戶
-
服務器架構。當前
SOA
使用了一些用于構建客戶
-
服務器應用的技術。盡管更加完善,
SOA
引進的復雜性也與單純的兩層客戶
-
服務器架構形成了尖銳對比。
-
分布式互聯(lián)網架構已與
SOA
一樣普遍,包括大量的技術。然而,不論是技術還是其基本設計原則,
SOA
都具有明顯特征。例如,
SOA
引進了不同于分布式互聯(lián)網架構的處理與安全需求,而且管理也典型地更加復雜,歸咎于它對基于消息的通信的依賴。
-
傳統(tǒng)架構已經且可繼續(xù)在其自身的設計范式中使用
Web
服務。重要的是不要將這些架構與
SOA
相混淆。在分布式互聯(lián)網架構中,發(fā)現(xiàn)了典型的對
Web
服務的非
SOA
方式的使用,此處
Web
服務被用于反映
RPC
風格的通信。