1. Current Component/Service Oriented Software System Development Model
2. Looking into Component (Coming later)
3. Looking outside Component (Coming later)
-
本文是Teddy關於基於組件及服務為中心的軟體系統開發的進一步思考的系列文章的第一篇,探討Teddy對當前的基於組件及服務的軟體系統開發現狀及基本思想的理解。本系列文章一共三篇,在之後兩篇中Teddy將站在“組件”這樣一個點上分別Looking into組件和Looking outside“組件”這個點,從而分別思考對第一篇中描述的軟體開發模型的改進的可能方案。Teddy並非軟體開發方面的資深專家,而只是一位喜歡思考的普通程式員,對軟體開發這樣一門科學的認識難免是具有非常的局限性的,因此,本文的觀點僅代表Teddy的個人見解,如果您認為文中的觀點過於奇特或幼稚,或者有失偏頗的,歡迎給與批評指教。
Current Component/Service Oriented Software System Development Model 我將自己理解的這樣一個模型,比較簡單的畫了一張MindMap圖。 請下載下面的MindMap圖,並開啟html檔案察看MindMap圖。您的瀏覽器需要支援Java Applet,您的系統必須正確安裝Sun的JRE v1.4+及相關瀏覽器外掛程式。如果在察看MindMap圖方面有問題的話,請自行查閱在瀏覽器中正確運行Java Applet的相關參考資料,Teddy並不承諾回答您這方面的問題,這裡先說句抱歉。另外,如果不能察看Applet,也可以開啟zip包內包含的pdf檔案察看MindMap展開後的靜態效果。
下載MindMap圖 - 如果您已經能夠正確察看,歡迎繼續往下閱讀! 在這個MindMap圖中,我簡單的將主要的元素分成左右兩類,左側是功能性的元素,右側則主要是輔助的非功能性元素。 既然是Component/Service Oriented,左側當然是Component和Service了。而右側則是使得Services和Component能夠協同工作的過程中,起主要作用的一些協助工具輔助。 - 讓我們從左側的Service開始。
什麼是Service呢?
節點上我給出了簡單注釋 - Langauge Independent Components with Unified Language/Platform Independent Interfaces。具體來說,這裡的Service泛指語言/平台無關的功能組件,它的對外介面的具體表現形式邏輯上就像一個Method,更具體的定義可以參見Teddy之前的文章《重新詮釋SOA》中關於Service的定義,即: -
Service - 一種執行介面,接受外部的調用請求,請求可以包含0到多個參數,根據參數處理該請求後,返回執行結果,結果包含處理的成功或失敗狀態及0到多個返回參數,其中每個請求參數或返回參數都由一個Key/Value對錶示。
Service的特性:
1)封裝了細節,只要介面和返回結果不變,被封裝了的實現細節對使用者並不需要關心;
2)一個Service內部可以調用其它Service來實現,甚至可以遞迴調用Service自身;-
根據Service當前的所在位置,基本可以將Service分為Local Service和非本地的Web Service。 請注意區別這裡的Service的定義和Web Service的定義與業界關於SOA的標準定義中Service和Web Service的定義相區別。您可以以業界的標準定義來直觀地理解上述,但是,這裡的定義本質上是一個更高一級的抽象描述。 -
那麼什麼又是Component - 組件呢? 這裡我簡單的將
所有可重用的平台/語言相關的原始碼層級的功能模組和二進位模組統稱為Component。您可以展開MindMap圖中的下級樹枝往下看。
每個本機群組件都會通過一組介面與外界互動,和組件的定義一樣,組件的介面,也可以是源碼級或二進位層級的介面。 本機群組件怎樣才能通過其介面和外部互動呢?兩種情況:
本地互動或遠程互動。 如果組件希望和同樣存在於
本地的提供同樣的或者至少是可以識別的本地介面的其他本機群組件互動的話,只需要在語言或者二進位層級
互相Reference就可以了。 如果需要互動的組件
不能直接通過本地介面來互動,那麼我們需要先將語言/平台相關的本地介面映射到平台無關的通用介面(Unified Language/Platform Independent Interfaces)。這個Mapping的過程需要Mapping工具來輔助,而Mapping工具則通過一定的Metadata Configuration來定義映射細節。 接著,可以
通過更高一級的平台無關介面級Reference或者通過TCP/IP與本地Service或外部Web Service進行互動。這兩種互動的媒介雖然不同,但是,基本的原則一致。同時,
不論是平台無關介面級Reference或者通過TCP/IP,都需要Checking一組Policy來進行一定的約束,例如安全性檢查或其他Contract約定。 -
我們可以看到,根據這個基本模型,基本可以構造出從大到小,無論是Component Oriented或Service Oriented或Component/Service Oriented的軟體系統。因此,我稱其為我理解的“當前的基於組件及服務的軟體系統開發的基本模型”。