當(dāng)下,SOA這個詞已經(jīng)深入人心,幾乎沒有人不說自己設(shè)計的應(yīng)用是遵從SOA的。
很多人對SOA的理解就是分層、模塊化、面向?qū)ο蟆!!_@種理解對不對后面再說。先看一些問題:
我今天看了一個開發(fā)團(tuán)隊的開發(fā)工程包結(jié)構(gòu),部分類的命名及組織產(chǎn)生了如下印象:
- 每個usecase是一根根煙囪
- 煙囪與煙囪之間連模型都沒有共享。其實(shí)業(yè)務(wù)模型是有設(shè)計的,主要是實(shí)現(xiàn)模型沒有保持業(yè)務(wù)模型的結(jié)構(gòu)特征,全部成了“值對象”,開發(fā)人員天天把這些值對象叫做領(lǐng)域?qū)ο蟆?/li>
- 有三層,是Struts幫忙定義的,三層分別根據(jù)usecase分包
這也是我們宣稱的SOA系統(tǒng)!!!!連最基本的模型設(shè)計、模塊設(shè)計、分層設(shè)計都沒做好,難怪年年重構(gòu)、年年完成不可能完成的任務(wù)!!!我確信這種重構(gòu)、這種不可能完成的任務(wù)還會年年持續(xù)下去!!!
究竟什么是符合SOA風(fēng)格的系統(tǒng)?先看看SOA宗師IBM的一篇文章:
http://www.ibm.com/developerworks/cn/architecture/ar-soastyle/
我來總結(jié)一下。
SOA能達(dá)到什么目的:
1.實(shí)現(xiàn)業(yè)務(wù)與IT的一致性;
2. 創(chuàng)建更靈活的反應(yīng)更敏捷的IT基礎(chǔ)設(shè)施;
3. 簡化集成實(shí)現(xiàn);
SOA要怎么做?
- 從應(yīng)用程序到流程和服務(wù)。消除應(yīng)用程序,將軟件系統(tǒng)創(chuàng)建為一組由業(yè)務(wù)流程進(jìn)行協(xié)調(diào)的交互服務(wù)。每個服務(wù)實(shí)現(xiàn)企業(yè)上下文中定義的特定業(yè)務(wù)目標(biāo)或功能,業(yè)務(wù)流程表示必須實(shí)現(xiàn)的業(yè)務(wù)解決方案。這個講的比較抽象,我的解讀就是服務(wù)表示一個最細(xì)粒度的業(yè)務(wù)目標(biāo)或功能,由業(yè)務(wù)流程來編排這些服務(wù),實(shí)現(xiàn)更大粒度的業(yè)務(wù)目標(biāo)或功能,業(yè)務(wù)流程也是服務(wù)。注意,這里隱式的定義了服務(wù)的概念,服務(wù)是自治的,可替換的,可被多個流程編排的,不耦合流程上下文的,是直接面向業(yè)務(wù)目標(biāo)或功能的,不是一個公共函數(shù)庫,服務(wù)不是封裝了數(shù)據(jù)和方法的類。
- SOA的服務(wù)基于業(yè)務(wù)資源(對象)定義,不支持操作者的執(zhí)行上下文,而是支持業(yè)務(wù)資源(對象)。這里的業(yè)務(wù)資源是指業(yè)務(wù)實(shí)體。業(yè)務(wù)實(shí)體也是來自業(yè)務(wù)的。所以,SOA能保證IT與業(yè)務(wù)的一致性。
別再說你的應(yīng)用程序或煙囪遵循SOA的架構(gòu)風(fēng)格!