每次給客戶(hù)做工作流培訓,都要接觸不同的行業(yè),但我每次都被問(wèn)了一個(gè)同樣的問(wèn)題:HongSoft老師,請問(wèn)應該怎么理解SOA?這個(gè)問(wèn)題其實(shí)和工作流培訓關(guān)系不大,但現在如火如荼的SOA的推廣都和BPEL扯上了關(guān)系,而B(niǎo)PEL又和工作流間“說(shuō)不清,道不明”,所以我還真要說(shuō)說(shuō),我是怎么理解SOA的。
7/80年代,流行的是過(guò)程式程序設計。我們一般要采用自頂向下分析方法做功能分解,這個(gè)是最自然最原始的想法,而分解的單位就是function。就比如用學(xué)生報到交學(xué)費為例:學(xué)校有3個(gè)部門(mén):教務(wù)處負責登記;財務(wù)處負責收學(xué)費;政務(wù)處負責發(fā)行李,可能還要收住宿費。
這里就會(huì )有4個(gè)function存在。登記();收學(xué)費();發(fā)行李();收住宿費()。首先要明白的一點(diǎn)就是:這里是按學(xué)校的內部規則(軟件系統內部功能)來(lái)劃分的,不是從學(xué)生(用戶(hù))的角度來(lái)考慮。然后如果你做過(guò)比較大型的C語(yǔ)言的開(kāi)發(fā)應該會(huì )知道一點(diǎn):收學(xué)費()這個(gè)function和
收住宿費()這個(gè)function兩個(gè)名稱(chēng)很有可能都取名為了收費(),在其中一個(gè)function是放在.so包中的情況下,C編譯器是不一定抱錯的。曾經(jīng)有個(gè)這樣的問(wèn)題花了我2天的時(shí)間來(lái)排查(用到了第3方公司的包)。
8/90年代出現了oo。oo的核心是對象。這里可能就有3個(gè)包:教務(wù)處/財務(wù)處/政務(wù)處;政務(wù)處這個(gè)包可能還會(huì )分為好幾個(gè)對象:檢查員對象檢查財務(wù)處蓋章,倉庫員對象負責發(fā)行李等等。這樣就解決了過(guò)程式程序設計的問(wèn)題,而且對學(xué)生(軟件的用戶(hù))來(lái)說(shuō),是基本按用戶(hù)的思路來(lái)考慮的,這也是老毛同志“為人民服務(wù)”的思路。
但這樣其實(shí)是不夠的。檢查員對象檢查財務(wù)處蓋章,是和另外的財務(wù)處包掛鉤的。財務(wù)處包可能會(huì )經(jīng)常發(fā)生變動(dòng):今年的特招生要多收3W/year;明年的特困生要可以貸款入學(xué)。。。。等等。這樣就會(huì )對檢查員對象檢查財務(wù)處蓋章產(chǎn)生影響:可能上面沒(méi)有章,但也要讓該生入住。
在這樣的情況下,就產(chǎn)生了用service為核心來(lái)架構軟件系統的思路。service是按實(shí)際的企業(yè)應用為單位來(lái)劃分的。 比如 政務(wù)處手續就可以定為一個(gè)這樣的service: 檢查員對象檢查財務(wù)處蓋章-->收住宿費-->發(fā)行李。service實(shí)際上是一個(gè)流程,而其中的一個(gè)流程單元有可能要和另外的service產(chǎn)生關(guān)系。SOA這樣來(lái)劃分系統的作用,就是減少服務(wù)和服務(wù)之間的耦合。
我們現在的機關(guān)單位提倡的”一站式服務(wù)“在SOA架構下變成了很大的可能。學(xué)生到“學(xué)校報道處”交了學(xué)費,填表。然后后面的執行流程自動(dòng)運轉,自動(dòng)到“教務(wù)處負責登記;財務(wù)處負責收學(xué)費;政務(wù)處負責發(fā)行李”等不同的service里面去,最后,“學(xué)校報道處”通知學(xué)生:請你到B-305入住。
從上面的技術(shù)分析,也可以看到管理領(lǐng)域,特別是BPM管理領(lǐng)域的一些思想。
聯(lián)系客服