【正文】
? 協(xié)議無關(guān)性要求每一個服務(wù)都可以通過不同的協(xié)議來調(diào)用。 ? SOA 架構(gòu)的出現(xiàn)為企業(yè)系統(tǒng)架構(gòu)提供了更加靈活的構(gòu)建方式,如果企業(yè)架構(gòu)設(shè)計師基于 SOA 來構(gòu)建系統(tǒng)架構(gòu),就可以從底層架構(gòu)的級別來保證整個系統(tǒng)的松耦合性以及靈活性,這都為未來企業(yè)業(yè)務(wù)邏輯的擴展打好了基礎(chǔ)。 214 ? OO vs. SOA ––OO的擴展遇到了挑戰(zhàn) ? 隨著時間的推移,接口繼承的復(fù)雜度在累積 ? 隨著系統(tǒng)間距離的延伸,調(diào)用成本在上升,類型系統(tǒng)的不同步 ? 擴展組件的功能成本高,不可確定未來需求,不可堆疊的擴展方式 ? 重用與標(biāo)準(zhǔn)化,重用是 OO的第一原則,難以維持和維護復(fù)雜的重用標(biāo)準(zhǔn)和機制 215 ? –OO vs. SOA – OO仍然適用于服務(wù)的開發(fā) ? 明顯的性能優(yōu)勢 ? 成熟的設(shè)計與開發(fā)方法 – SOA適用于系統(tǒng)的互聯(lián) ? 互操作性的要求強于性能的要求 216 ? SOA 既不是一種語言,也不是一種具體的技術(shù),它是一種新的軟件系統(tǒng)架構(gòu)模型。一些非持久的臨時數(shù)據(jù)也應(yīng)該在視圖中存取。對于用戶的輸入 ,視圖將它們交給控制器處理。 ? 視圖: ? 視圖將模型的當(dāng)前狀態(tài)展示給用戶 ,具體的顯示方法由視圖負(fù)責(zé) ,因此一個模型可以適用多個不同的視圖。任何和整個應(yīng)用有關(guān)的持久性數(shù)據(jù)都應(yīng)該放在模型中。 ? 以 MVC模式構(gòu)造軟件 ,可以使得軟件結(jié)構(gòu)靈活、重用性好、擴展性佳。大多數(shù)現(xiàn)代交互軟件都在一定程度上符合這一架構(gòu)模型的特點。ICQ以及 Web Service技術(shù)的大多數(shù)應(yīng)用,都是典型的點對點結(jié)構(gòu)。 208 點對點( Peer to Peer) ? 系統(tǒng)中的節(jié)點都處于平等的地位,每個節(jié)點都可以連接其他節(jié)點。 207 優(yōu)缺點 ? 優(yōu)點: ? 結(jié)構(gòu)簡單,系統(tǒng)中不同類型的任務(wù)分別由客戶和服務(wù)器承擔(dān),有利于發(fā)揮不同機器平臺的優(yōu)勢; ? 支持分布式、并發(fā)環(huán)境,特別是當(dāng)客戶和服務(wù)器之間的關(guān)系是多對多時,可以有效地提高資源的利用率和共享程度; ? 服務(wù)器集中管理資源,有利于權(quán)限控制和系統(tǒng)安全。這種機制有時稱為負(fù)載平衡。已被激活并且準(zhǔn)備接收請求的任何服務(wù)器都將向代理程序注冊自己,以便下一次客戶端向代理程序請求這種類型的服務(wù)器時,代理程序能夠使用它。 204 經(jīng)紀(jì)人 (Broker) ? 客戶和服務(wù)器通過一個經(jīng)紀(jì)人部件進行通信,經(jīng)紀(jì)人負(fù)責(zé)協(xié)調(diào)客戶和服務(wù)器之間的操作,并且為客戶和服務(wù)器發(fā)送請求和結(jié)果信息。這種架構(gòu)主要用于數(shù)據(jù)庫和人工智能系統(tǒng)的開發(fā)。 ? 同實現(xiàn)有關(guān),過濾器之間的數(shù)據(jù)傳輸率較低,而且每個過濾器都要作類似的數(shù)據(jù)打包和解包的工作。轉(zhuǎn)換通常不適合交互式的應(yīng)用。 ? 各過濾器可以并發(fā)運行。 ? 系統(tǒng)易于維護和增強:增加新過濾器,替換舊過濾器。 – 獨立性還表現(xiàn)在它對其處理的上游和下游連接的過濾器是 無知 的 .它的設(shè)計和使用不對與其連接的任何過濾器施加限制,唯一關(guān)心的是其輸入數(shù)據(jù)的,然后進行加工處理,最后產(chǎn)生數(shù)據(jù)輸出。也就是除了輸入和輸出外,每個過濾器不受任何其他過濾器運行的影響。每個處理步驟由一個過濾器組件實現(xiàn),它處理或者轉(zhuǎn)化數(shù)據(jù),并且系統(tǒng)的輸入可以是多種數(shù)據(jù)源。這些步驟采用通過系統(tǒng)的數(shù)據(jù)流連接。 – 存在不同的輸入數(shù)據(jù)源,可以用多種方式輸出或存放最終結(jié)果。 – 不同的語境中小的處理步驟要比大的組件更易于重用。通過加入這樣的靈活性,采用現(xiàn)有處理組件構(gòu)建是可以辦到的。把這樣的系統(tǒng)作為單個組件實現(xiàn)是不容易的: – 系統(tǒng)必須由幾個開發(fā)人員同時進行協(xié)作開發(fā),整個系統(tǒng)任務(wù)自然就被分解為幾個處理階段,而且需求很容易變動。傳統(tǒng)的編譯器一直被認(rèn)為是一種管道系統(tǒng),在該系統(tǒng)中,一個階段(包括詞法分析、語法分析、語義分析和代碼生成)的輸出是另一個階段的輸入。每個過濾器可以單獨修改,功能單一,并且它們之間的順序可以進行配置。 198 管道和過濾器( Pipes and Filters) ? 管道和過濾器架構(gòu)模式是為處理數(shù)據(jù)流的系統(tǒng)提供的一種模式。我們可以修改商務(wù)層,不斷地從數(shù)據(jù)層接受相同的數(shù)據(jù),并把這些數(shù)據(jù)傳遞到表示層,而不用擔(dān)心出現(xiàn)歧義。 ? 數(shù)據(jù)層從數(shù)據(jù)庫中獲得較為原始的數(shù)據(jù),商務(wù)層把數(shù)據(jù)轉(zhuǎn)換成符合商務(wù)規(guī)則的有意義的信息,表示層把信息轉(zhuǎn)換成對于用戶有意義的內(nèi)容。 197 ? 表示層:從中間層獲得信息并顯示給用戶。 ? 中間層:包括一個或者多個組件服務(wù),它們應(yīng)用商務(wù)規(guī)則、實現(xiàn)應(yīng)用程序邏輯并完成應(yīng)用程序運行所需要的數(shù)據(jù)處理。 ? 數(shù)據(jù)層:包含數(shù)據(jù)存儲和與它交互的組件或服務(wù)。一般地,我們將應(yīng)用程序功能分為三個方面,對應(yīng) 3層架構(gòu)模式。完成這一目標(biāo)的一種好方法就是在層上工作,將一個應(yīng)用程序的主要功能分離到不同的層或者級中。 ? 軟件為什么要分層? 為了實現(xiàn)“高內(nèi)聚、低耦合”。代碼模式的好壞會影響到一個中等尺度組件的內(nèi)部、外部的結(jié)構(gòu)或行為的底層細(xì)節(jié),但不會影響到一個部件或子系統(tǒng)的中等尺度的結(jié)構(gòu),更不會影響到系統(tǒng)的總體布局和大尺度框架。設(shè)計模式定義出子系統(tǒng)或組件的微觀結(jié)構(gòu)。這些中等尺度的結(jié)構(gòu)實現(xiàn)了一些大尺度組件的行為和它們之間的關(guān)系。架構(gòu)模式的好壞可以影響到總體布局和框架性結(jié)構(gòu)。 190 C++框架 ? ACE ? BOOST ? MFC ? ATL ? QT ? wxWidgets ? … 191 不同層次的模式 ? 架構(gòu)模式 (Architectural Pattern) ? 設(shè)計模式 (Design Pattern) ? 代碼模式 (Coding Pattern) 192 ? 區(qū)別:在于三種不同的模式存在于它們各自的抽象層次和具體層次。它包括三個主要部分:公共語言運行時、框架類和 。 ? 框架一般處在低層應(yīng)用平臺(如 J2EE)和高層業(yè)務(wù)邏輯之間的中間層。 ? 框架一般是成熟,穩(wěn)健的,可以處理系統(tǒng)很多細(xì)節(jié)問題,比如,事物理,安全性,數(shù)據(jù)流控制等問題。 186 為什么要用框架 ? 因為軟件系統(tǒng)發(fā)展到今天已經(jīng)很復(fù)雜了,特別是服務(wù)器端軟件,設(shè)計到的知識,內(nèi)容,問題太多。 ? 框架與架構(gòu)的區(qū)別? – 并無明確的定義,但一般從層的觀點看,認(rèn)為框架是底層的,接近系統(tǒng)的。簡單說就是使用別人搭好的舞臺,你來做表演。 184 軟件框架 ? 什么是框架 ? 框架與架構(gòu)的區(qū)別 ? 常見的框架 185 框架 ? 什么是框架? – 框架,即 framework。 ? 基于數(shù)據(jù)庫的系統(tǒng)架構(gòu): – 一般有多少個數(shù)據(jù)表,就會有多少頁的架構(gòu)設(shè)計文檔。 ? 設(shè)計決定: – 進行軟件設(shè)計需要做出的決定中,必然會包括邏輯結(jié)構(gòu)、物理結(jié)構(gòu),以及它們?nèi)绾斡绊懙较到y(tǒng)的所有非功能性特征。 ? 邏輯元件: – 一個軟件系統(tǒng)中的元件首先是邏輯元件。 ? 系統(tǒng)架構(gòu)的設(shè)計要求架構(gòu)師具備軟件和硬件的功能和性能的過硬知識,這一工作是架構(gòu)設(shè)計工作中最困難的工作。 181 物理架構(gòu) ? 軟件元件是怎樣放到硬件上的 ? 下圖描述了一個分布于北京和上海的分布式系統(tǒng)的物理架構(gòu),圖中所有的元件都是物理設(shè)備,包括網(wǎng)絡(luò)分流器、代理服務(wù)器、 WEB服務(wù)器、應(yīng)用服務(wù)器、報表服務(wù)器、整合服務(wù)器、存儲服務(wù)器、主機等等。以最快的速度爭奪市場先機非常重要。 178 ? 客戶體驗( Customer Experience): – 軟件系統(tǒng)必須易于使用。 ? 可擴展性( Extensible): – 在新技術(shù)出現(xiàn)的時候,一個軟件系統(tǒng)應(yīng)當(dāng)允許導(dǎo)入新技術(shù),從而對現(xiàn)有系統(tǒng)進行功能和性能的擴展 ? 可維護性( Maintainable): – 軟件系統(tǒng)的維護包括兩方面,一是排除現(xiàn)有的錯誤,二是將新的軟件需求反映到現(xiàn)有系統(tǒng)中去。只有這樣,才能適應(yīng)用戶的市場擴展得可能性。 ? 安全性( Secure) : – 軟件系統(tǒng)所承擔(dān)的交易的商業(yè)價值極高,系統(tǒng)的安全性非常重要。顯然,這樣的決定必定是有關(guān)系統(tǒng)設(shè)計成敗的最重要決定,必須經(jīng)過慎重的研究和考察。 175 ? 建造一個系統(tǒng)所作出的最高層次的、以后難以更改的,商業(yè)的和技術(shù)的決定。 ? 詳細(xì)地說,就是要包括架構(gòu)元件( Architecture Component)、聯(lián)結(jié)器( Connector)、任務(wù)流( Taskflow)。 171 172 常用的軟件架構(gòu)風(fēng)格及適用情況分析 康凱 173 ? 軟件架構(gòu) ? 軟件框架 ? 常見的架構(gòu)風(fēng)格 174 軟件架構(gòu)概論 ? 系統(tǒng)架構(gòu)是一個軟件系統(tǒng)從整體到部分的最高層次的劃分。 ? 例如 , 可能希望用 LogoutExitModem來裝飾 Modem層次結(jié)構(gòu) , 當(dāng) Hangup被調(diào)用時 ,它會發(fā)送字符串 exit。它捕獲對 dial函數(shù)的調(diào)用并在委托前把音量設(shè)高。 169 DECORATOR模式 ? DECORATOR模式通過創(chuàng)建一個名為 LoudDialModem的全新類來解決這個問題。每個使用者都可以坐在他的計算機前 ,要求系統(tǒng)使用該計算機的調(diào)制解調(diào)器呼叫另一臺計算機。 167 VlSITOR模式的解決方法 168 其它模式 ? 問題: ? 考慮前面的 Modem層次結(jié)構(gòu)。從該數(shù)據(jù)結(jié)構(gòu)可以生成無數(shù)的報表。這意味著報表可以被放置在不同的組件中 ,并且僅被那些需要它們的客戶單獨使用。這使得數(shù)據(jù)結(jié)構(gòu)對象中不含有任何產(chǎn)生報表的代碼。每當(dāng)出現(xiàn)一種新操作系統(tǒng)時 , 就必須更改該接口并重新部署所有的調(diào)制解調(diào)器軟件。(假設(shè)每個不同的調(diào)制解調(diào)器在 UNIX中都有自己獨特的配置方法和行為特征)。使之可在 UNIX下工作。派生類代表不同調(diào)制解調(diào)器類型的驅(qū)動程序。 158 例子 e x e c u t e ( ) { }c o m m a n d+ e x e c u t e ( )I c o m m a n d+ e x e c u t e ( ) I n t e r f a c . . .c o m m a n d+ e x e c u t e ( )123c o m m a n d+ e x e c u t e ( )4I c o m m a n d+ e x e c u t e ( ) I n t e r f a c . . .I n v o k e r1 . . *159 結(jié)構(gòu) 160 其它設(shè)計模式 161 ? VISITOR模式 ? 該系列中的模式如下 : – VISlTOR模式 – ACYCLIC VISITOR模式 – DECORATOR模式 – EXTENSION OBJECT模式 162 例 ? 是一個常見的問題:例如 ,有一個 Modem對象的層次結(jié)構(gòu)。這個對象可被存儲并像其他的對象一樣被傳遞。而工具箱的設(shè)計者無法知道請求的接受者或執(zhí)行的操作。 – 例如,用戶界面工具箱包括按鈕和菜單這樣的對象,它們執(zhí)行請求響應(yīng)用戶輸入。 153 橋接模式 154 觀察者( observer)模式 康凱 155 156 命令( mand)模式 康凱 157 ? 意圖 – 將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數(shù)化;對請求排隊或記錄請求日志,以及支持可撤消的操作。 152 描述變化 ? 下一步是描述出現(xiàn)的特定變化: Shape類擁有矩形和圓形 。 形狀有責(zé)任知道如何畫自己 。共同的 “ 概念 ” 則是 “ 形狀 ” 和 “ 畫圖程序 ” 。 151 識別變化 ? 首先識別出 “ 什么在發(fā)生變化 ” 。 V2Rectangle類的實現(xiàn)方 法是:保存一個 DP2對象 的引用 , 使用這個對象的 drawline方法 。 149 例 通過引入一個 Rectangle 抽象類 , 利用了這一事 實:不同的 Rectangle派 生類之間唯一的差異是如 何實現(xiàn) drawLine方法 。 ? 抽象部分是指 “ 不同的事物在概念層次上的聯(lián)系 ” 。例如在美國與加拿大。 4. 把 setWeapon() 方法放到正確的類中。 。 。 ? 任務(wù): 。包括代表游戲角色的類,以及武器行為的類。 – SqlDataAdapter adapter = new SqlDataAdapter()。 ? 不用模式的做法:可以直接創(chuàng)建這些對象: – SqlConnection connection = new SqlConnection(strConnection)。 137 Log+ W r it e ( )I L o g I n t e r f a c e + E x e c u t e ( )L o g 2 T x t F il e+ E x e c u t e ( )L o g 2 X m lF i le+ E x e c u t e ( )L o g 2 D B+ E x e c u t e ( )