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