面向服務(wù)的8個(gè)原則
服務(wù)可復(fù)用 不管是否存在即時(shí)復(fù)用的機(jī)會(huì),服務(wù)被設(shè)計(jì)為支持潛在可復(fù)用。
服務(wù)共享一個(gè)正式契約 為了與服務(wù)交互,只需要共享描述每個(gè)服務(wù)信息交換術(shù)語(yǔ)定義的正式契約。
服務(wù)是松散耦合的 服務(wù)被設(shè)計(jì)為無(wú)需緊密的、跨服務(wù)的依賴而交互。
服務(wù)是底層邏輯的抽象 只有經(jīng)由服務(wù)契約所暴露的部分服務(wù)對(duì)于外部世界是可見(jiàn)的。契約之外所表達(dá)的底層邏輯是不可見(jiàn)的,且與服務(wù)請(qǐng)求者無(wú)關(guān)。
服務(wù)是可組合的 服務(wù)可能組合其他服務(wù)。這允許表示不同粒度的邏輯,并促進(jìn)復(fù)用及抽象層的創(chuàng)建。
服務(wù)是自治的 邏輯由服務(wù)所控制,并位于一個(gè)清晰的邊界內(nèi)。服務(wù)已經(jīng)在這個(gè)邊界內(nèi)被控制,并且不依賴于執(zhí)行其控制的其他服務(wù)。
服務(wù)是無(wú)狀態(tài)的 服務(wù)應(yīng)當(dāng)不需要管理狀態(tài)信息,因此能夠其維持松耦合性。服務(wù)應(yīng)當(dāng)盡可能設(shè)計(jì)成無(wú)狀態(tài)的,即便這意味著要將狀態(tài)管理移至別處。
服務(wù)是可發(fā)現(xiàn)的 服務(wù)應(yīng)當(dāng)允許其描述被發(fā)現(xiàn),并被人工和可能會(huì)利用其邏輯的服務(wù)請(qǐng)求者所理解。
這個(gè)8個(gè)面向服務(wù)的原則乍看很像我們熟悉的OOP啊,不過(guò)如果你把一個(gè)服務(wù)抽象成一個(gè)對(duì)象來(lái)看的話也就不難理解了。
下面介紹一下依據(jù)這8個(gè)原則構(gòu)建的SOA的各個(gè)服務(wù)層:
1、連通性服務(wù)層
所謂的連通性是指對(duì)于原有系統(tǒng)的數(shù)據(jù)連通,由于原有系統(tǒng)不能提供一個(gè)具有通用性的數(shù)據(jù)服務(wù),所以在連通性服務(wù)層的主要任務(wù)就是負(fù)責(zé)把原來(lái)已有的JDBC的,EJB的,webService的各種數(shù)據(jù)服務(wù),封裝成具有統(tǒng)一標(biāo)準(zhǔn)的java pojo控件,然后其它的就可以方便,簡(jiǎn)單的實(shí)現(xiàn)對(duì)數(shù)據(jù)服務(wù)的調(diào)用。
連通性服務(wù)層:
服務(wù)對(duì)象:需要獲得數(shù)據(jù)的對(duì)象 如業(yè)務(wù)層、表示層等
提供服務(wù):可以操作原有系統(tǒng)的數(shù)據(jù)層 如對(duì)一個(gè)sap服務(wù)器進(jìn)行操作、對(duì)一個(gè)DB服務(wù)器進(jìn)行操作鄧
調(diào)用資源:原有系統(tǒng)的數(shù)據(jù)服務(wù)接口 如EJB、Hibernate,JDBC等
圖1:
在這里值得一提的是bea在使用workshop對(duì)于連通性服務(wù)層創(chuàng)建,非常簡(jiǎn)單,完全圖形化的方式,只需簡(jiǎn)單的鼠標(biāo)拖曳,就可以實(shí)現(xiàn)服務(wù)控件的建立。
2、業(yè)務(wù)流程服務(wù)層
我們知道一般的業(yè)務(wù)系統(tǒng)都會(huì)有一些自由的業(yè)務(wù)流程的,那么如何讓這些原有的業(yè)務(wù)流程來(lái)提供給SOA系統(tǒng)使用呢?
在bea專家給我們演示的demo中,我看到bea的做法是把每一個(gè)流程節(jié)點(diǎn)封裝成了服務(wù),這樣,這些流程節(jié)點(diǎn)每個(gè)都可以成為一個(gè)向外提供服務(wù)的服務(wù)者了。
業(yè)務(wù)流程服務(wù)層:
服務(wù)對(duì)象:需要流程控制的對(duì)象 如其他業(yè)務(wù)層,表示層等
提供服務(wù):業(yè)務(wù)流程控制 如從a入口進(jìn)入后是應(yīng)該去b節(jié)點(diǎn)還是應(yīng)該去c節(jié)點(diǎn)
調(diào)用資源:通常是連通性服務(wù)層的服務(wù)
圖2:
在bea演示的時(shí)候?qū)τ跇I(yè)務(wù)流程服務(wù)層的構(gòu)建依然采用的是圖形化的方式,這里值得稱道的是在使用圖形化的過(guò)程中,bea的工具還可以支持對(duì)于服務(wù)的格式轉(zhuǎn)換
3、服務(wù)中介層
上面已經(jīng)介紹了兩種服務(wù)層了,在soa中這兩層的調(diào)用不是簡(jiǎn)單的上下層關(guān)系。在實(shí)際項(xiàng)目中,也許有的需求是需要流程控制的,但是也許有些需求是直接要求展示數(shù)據(jù)的,那么如何處理這兩種的需求呢。這里就是在soa中最重要的一個(gè)層了,服務(wù)中介層。很多人應(yīng)該聽(tīng)過(guò)soa中service bus這個(gè)概念。我之前一直理解為服務(wù)總線僅僅是為客戶端提供服務(wù)的,其實(shí)是不對(duì)的,實(shí)際上服務(wù)總線是一個(gè)用了穿起來(lái)各個(gè)服務(wù)層的,就好比是一個(gè)糖葫蘆,服務(wù)中介層就是中間的那根棍子。
圖3:
做為服務(wù)中介層來(lái)說(shuō),主要有兩種服務(wù),一種是應(yīng)用服務(wù);另外一個(gè)是代理服務(wù),用來(lái)對(duì)應(yīng)用服務(wù)進(jìn)行代理封裝的,是服務(wù)總線中向外暴露的服務(wù)。
4、表示層服務(wù)層
表示層服務(wù)主要和不同的客戶端有關(guān),bea在這里的講述中由于時(shí)間緊張所以比較簡(jiǎn)單。重點(diǎn)還是在演示他們可視化得頁(yè)面編輯。但是這里有點(diǎn)給我洗腦得就是,對(duì)于不同的客戶端所提供的服務(wù)是直接可以使用的,比如判斷一個(gè)用戶名是否合法,表示層服務(wù)不是返回的true,false,而是直接返回,“該用戶名可用”,“該用戶名已被占用”這樣的字符串。
關(guān)于表示層我就不再畫(huà)圖了,最后是一個(gè)整體的soa層次結(jié)構(gòu)圖:

posted on 2008-05-22 22:52
rocket 閱讀(1611)
評(píng)論(0) 編輯 收藏 所屬分類:
構(gòu)架設(shè)計(jì)