|
在日常業(yè)務(wù)中有些事物并不時常改變,比如說美國加油站一直以來都在用加侖為單位銷售汽油,餐館依然使用菜單,牙科醫(yī)生還是會每六個月就銷售一次清潔用品。每種業(yè)務(wù)都會有一些方面不時常變動,而這部分往往占據(jù)了是業(yè)務(wù)的絕大部分。我們就稱這些為核心業(yè)務(wù)功能(_core business functions)。業(yè)務(wù)中的也存在一些常常變化的事物。價格、稅率、貨品分類、新產(chǎn)品、新市場策略、廣告、新業(yè)務(wù)領(lǐng)域、新領(lǐng)域的客戶等等。的確,為了生存,企業(yè)必定要變化,而且是快速的變化。不過,至關(guān)重要的是要那些變化影響不到核心業(yè)務(wù)功能。
軟件開發(fā)人員早就明白變化快速的軟件模塊要與保持不變的部分相分離的道理。這項原則在獨(dú)立的程序或系統(tǒng)之中有時稱作是“共同封閉原則”。而運(yùn)用在企業(yè)的信息管理系統(tǒng)之中就成了SOA。SOA是把保持不變的核心業(yè)務(wù)功能剝離成一個個獨(dú)立的服務(wù)的實踐。這些服務(wù)是被多個展現(xiàn)層程序所調(diào)用的粉飾了的方法。展現(xiàn)層程序是那些容易變化的程序,用來展示數(shù)據(jù)給用戶或是從用戶處接收數(shù)據(jù)。
我們通過思考InterNET上的商鋪來幫助搞明白。客戶通過瀏覽器來與商鋪站點(diǎn)的展現(xiàn)程序相交互。展現(xiàn)程序解析了客戶的操作,然后調(diào)用一些像是獲取當(dāng)前分類的數(shù)據(jù)或是為注冊客戶要求的服務(wù)。請注意,這些服務(wù)并不知道正在與web站點(diǎn)交互。他們就像是與厚客戶端交互,或是3270的綠屏界面(3270是IBM的一種大型機(jī)系統(tǒng),其上應(yīng)用程序常以綠屏的終端形式出現(xiàn),因而常稱作“綠屏”應(yīng)用程序)。他們只是簡單返回那些web系統(tǒng)可能會用到的數(shù)據(jù),并將其格式標(biāo)準(zhǔn)化。
SOA其實也就是這些了,其余部分就是一些細(xì)節(jié)。在最高的抽象層面上,SOA就是將頻繁變化與不常變化的元素分離,僅此而已。但為什么這一點(diǎn)會變得那么重要?讓我們再來看看InterNET上的商鋪。它展現(xiàn)給用戶一個分類,從而使得用戶能夠?qū)⑽锲芬迫牖蚴且瞥鲆粋€購物車,并且最終實現(xiàn)訂購。這些內(nèi)容的展現(xiàn)卻很善變,市場人士喜歡令其時常變化。比如說,他們可能會想把購物車比作是邊框上的滾動欄。他們想要或多或少的在產(chǎn)品列表上的附加說明。他們想要不同的配色,字體和布局方式。確實他們想要applets、JStart Clients、Ajax,以及無數(shù)其他的展現(xiàn)選擇??墒撬械倪@些都與封裝為服務(wù)的核心業(yè)務(wù)功能毫無關(guān)系。無論展現(xiàn)層的風(fēng)吹雨打,這些獲取分類以及注冊流程卻固定不變。這就是為何分離顯得這么重要。它確保了信息處理在展現(xiàn)的飄搖不定中得到保護(hù)。
不過展現(xiàn)并非唯一易變的,業(yè)務(wù)功能也是一樣。再次考慮下我們的商鋪,或許在銷售產(chǎn)品中需要增加一種優(yōu)質(zhì)紅酒。而銷售煙酒則需要驗證消費(fèi)者的年齡。假定我們有了能提供驗證的Service。而每當(dāng)有煙酒訂單的時候,這個Service就會調(diào)用到。呼叫此service的決定并非來自于展現(xiàn)層,當(dāng)然也不屬于業(yè)務(wù)。而是某種特定手續(xù)所需的業(yè)務(wù)過程。業(yè)務(wù)過程變動就像是兔子跳動那樣躁動不安。如果業(yè)務(wù)成長了,他們會為其業(yè)務(wù)流程增加更多的步驟以及分支。處理過程中需要調(diào)用到的那些服務(wù)無序改變,可是處理的過程卻需要。因此,我們就需要將業(yè)務(wù)過程從展現(xiàn)層以及業(yè)務(wù)service中分離出來。如果它出現(xiàn)在單一的程序中,Smalltalk語言對這樣的分離有個稱謂,就叫做Mode-View-Controller。
值得注意的是,這么多的技術(shù)都殊途同歸的與SOA有著關(guān)聯(lián)。這是因為SOA并非什么特定的技術(shù),而是某種將優(yōu)化的業(yè)務(wù)功能于易變的過程與展現(xiàn)相解藕的方法學(xué)。這就是企業(yè)軟件的MVC。
it知識庫:SOA歸根到底是什么?,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。