軟件架構(gòu)與設(shè)計(jì)模式_第1頁
軟件架構(gòu)與設(shè)計(jì)模式_第2頁
軟件架構(gòu)與設(shè)計(jì)模式_第3頁
軟件架構(gòu)與設(shè)計(jì)模式_第4頁
軟件架構(gòu)與設(shè)計(jì)模式_第5頁
已閱讀5頁,還剩129頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

軟件架構(gòu)與設(shè)計(jì)模式曾令秋博士、副教授2014年4月1.軟件架構(gòu)軟件架構(gòu)定義架構(gòu)設(shè)計(jì)方法與過程軟件架構(gòu)的設(shè)計(jì)要點(diǎn)2.模式簡(jiǎn)介模式的定義模式的分類3.常用模式從混沌到結(jié)構(gòu)分布式基礎(chǔ)設(shè)施事件多路分離和分派接口分割組件分割4.典型面向服務(wù)的架構(gòu)SOA2目錄1.軟件架構(gòu)1.1架構(gòu)定義軟件體系結(jié)構(gòu)通常被稱為架構(gòu),指可以預(yù)制和可重構(gòu)的軟件框架結(jié)構(gòu),Garlan&Shaw模型的基本思想是:軟件體系結(jié)構(gòu)={構(gòu)件(component)、連接件(connector)和約束(constrain)}:構(gòu)件可以是一組代碼,如程序的模塊;也可以是一個(gè)獨(dú)立的程序;連接件可以是過程調(diào)用、管道、遠(yuǎn)程過程調(diào)用(RPC)等,用于表示構(gòu)件之間的相互作用;約束一般為對(duì)象連接時(shí)的規(guī)則,或指明構(gòu)件連接的形式和條件,例如,上層構(gòu)件可要求下層構(gòu)件的服務(wù),反之不行;兩對(duì)象不得遞規(guī)地發(fā)送消息;代碼復(fù)制遷移的一致性約束;什么條件下此種連接無效等。4架構(gòu)定義軟件架構(gòu)不僅僅注重軟件本身的結(jié)構(gòu)和行為,還注重其他特性:使用,功能性,性能,彈性,重用,可理解性,經(jīng)濟(jì)和技術(shù)的限制及權(quán)衡。5例:ACE的分層架構(gòu)6架構(gòu)的范圍軟件架構(gòu)—本門課程的主關(guān)注點(diǎn)。硬件架構(gòu)—包括CPU,內(nèi)存,硬盤,周邊設(shè)備例如打印機(jī),與連接這些元素的部分。組織架構(gòu)—是一些關(guān)于商業(yè)進(jìn)程,組織結(jié)構(gòu),規(guī)則和職責(zé),與組織核心能力的部分。信息架構(gòu)—包含組織好的信息結(jié)構(gòu)。軟件架構(gòu)、硬件架構(gòu)、組織架構(gòu)和信息架構(gòu)是全部系統(tǒng)架構(gòu)的子結(jié)構(gòu)。企業(yè)架構(gòu)與系統(tǒng)架構(gòu)很相似,包括硬件,軟件,人員等。7

企業(yè)架構(gòu)師EA(EnterpriseArchitect)

的職責(zé)是決定整個(gè)公司的技術(shù)路線和技術(shù)發(fā)展方向。蓋茨給自己的Title是首席軟件架構(gòu)師,實(shí)際上就是EA角色;

基礎(chǔ)結(jié)構(gòu)架構(gòu)師IA(InfrastructureArchitect)

的工作是提煉和優(yōu)化技術(shù)方面積累和沉淀形成的基礎(chǔ)性的、公共的、可復(fù)用的框架和組件,這些是技術(shù)型公司傳承下來的最寶貴的財(cái)富;

特定技術(shù)架構(gòu)師TSA(Technology-SpecificArchitect)主要從事類似安全架構(gòu)、存儲(chǔ)架構(gòu)等專項(xiàng)技術(shù)的規(guī)劃和設(shè)計(jì)工作;

解決方案架構(gòu)師SA(SolutionArchitect)的工作則專于解決方案的規(guī)劃和設(shè)計(jì),所謂解決方案,就是把產(chǎn)品、技術(shù)或理論,不斷地進(jìn)行組合,來創(chuàng)造出滿足用戶需求的選擇。

軟件架構(gòu)師基本上是EA+TSA+IA,是程序員向上發(fā)展的道路,系統(tǒng)架構(gòu)師實(shí)際上是SA+TSA,更著力于綜合運(yùn)用已有的產(chǎn)品和技術(shù),來實(shí)現(xiàn)客戶期望的需求。架構(gòu)師分類81.2架構(gòu)設(shè)計(jì)基本過程概念化階段分析階段架構(gòu)設(shè)計(jì)階段并行開發(fā)和測(cè)試階段驗(yàn)收與交互階段愿景需求架構(gòu)可執(zhí)行系統(tǒng)交付的系統(tǒng)9架構(gòu)設(shè)計(jì)基本過程分析階段需求分析領(lǐng)域建模確定關(guān)鍵需求概念性架構(gòu)設(shè)計(jì)細(xì)化架構(gòu)驗(yàn)證架構(gòu)架構(gòu)設(shè)計(jì)階段10軟件需求需求系統(tǒng)必須滿足的情況或提供的能力.可以直接來自客戶需要,也可以來自合同,標(biāo)準(zhǔn),規(guī)范或其他有正規(guī)約束力的文檔軟件需求功能需求非功能需求質(zhì)量屬性約束運(yùn)行期質(zhì)量屬性開發(fā)期質(zhì)量屬性11軟件系統(tǒng)架構(gòu)要素它是一個(gè)軟件系統(tǒng)從整體到部分的最高層次的劃分。一個(gè)系統(tǒng)通常是由組件組成的,而這些組件如何形成、相互之間如何發(fā)生作用,則是關(guān)于這個(gè)系統(tǒng)本身結(jié)構(gòu)的重要信息。系統(tǒng)包括架構(gòu)組件、連接器、任務(wù)流。架構(gòu)組件是組成系統(tǒng)的核心“磚瓦”,而連接器則描述這些組件之間通訊的路徑、通訊的機(jī)制、通訊的預(yù)期結(jié)果,任務(wù)流則描述系統(tǒng)如何使用這些組件和連接器完成某一項(xiàng)需求。它是建造一個(gè)系統(tǒng)所作出的最高層次的、以后難以更改的,商業(yè)的和技術(shù)的決定。這樣的決定必定是有關(guān)系統(tǒng)設(shè)計(jì)成敗的最重要決定,必須經(jīng)過非常慎重的研究和考察。在決定時(shí),要考慮獨(dú)特的架構(gòu)風(fēng)格和恰當(dāng)?shù)募軜?gòu)模式。1.3軟件架構(gòu)的設(shè)計(jì)要素12軟件架構(gòu)的目標(biāo)

可靠性(Reliable)。軟件系統(tǒng)對(duì)于用戶的商業(yè)經(jīng)營和管理來說極為重要,因此軟件系統(tǒng)必須非??煽俊?/p>

安全性(Secure)。軟件系統(tǒng)所承擔(dān)的交易的商業(yè)價(jià)值極高,系統(tǒng)的安全性非

常重要。

可擴(kuò)展性(Scalable)。軟件必須能夠在用戶的使用率、用戶的數(shù)目增加很快的情況下,保持合理的性能,才能適應(yīng)用戶的市場(chǎng)擴(kuò)展得可能性。

可定制化(Customizable)。同樣的一套軟件,可以根據(jù)客戶群的不同和市場(chǎng)需求的變化進(jìn)行調(diào)整。13軟件架構(gòu)的目標(biāo)

可延伸性(Extensible)。在新技術(shù)出現(xiàn)的時(shí)候,一個(gè)軟件系統(tǒng)應(yīng)當(dāng)允許導(dǎo)入新技術(shù),從而對(duì)現(xiàn)有系統(tǒng)進(jìn)行功能和性能的擴(kuò)展;

可維護(hù)性(Maintainable)。軟件系統(tǒng)的維護(hù)包括兩方面:1。排除現(xiàn)有的錯(cuò)

誤,2。將新的軟件需求反映到現(xiàn)有系統(tǒng)中去。一個(gè)易于維護(hù)的系統(tǒng)可以有效

地降低技術(shù)支持的花費(fèi)

客戶體驗(yàn)(CustomerExperience)。軟件系統(tǒng)必須易于使用。

市場(chǎng)時(shí)機(jī)(TimetoMarket)。軟件用戶要面臨同業(yè)競(jìng)爭(zhēng),軟件提供商也要面

臨同業(yè)競(jìng)爭(zhēng)。以最快的速度爭(zhēng)奪市場(chǎng)先機(jī)非常重要。14軟件架構(gòu)的種類軟件系統(tǒng)的邏輯架構(gòu)圖邏輯架構(gòu):軟件系統(tǒng)中元件之間的關(guān)系,比如用戶界面,數(shù)據(jù)庫,外部系統(tǒng)接口,商業(yè)邏輯元件,等等15軟件架構(gòu)的種類物理架構(gòu):軟件元件是怎樣放到硬件上的軟件系統(tǒng)的物理架構(gòu)圖16軟件架構(gòu)的種類系統(tǒng)架構(gòu):系統(tǒng)的非功能性特征,如可擴(kuò)展性、可靠性、強(qiáng)壯性、靈活性、

性能等。系統(tǒng)架構(gòu)的設(shè)計(jì)要求架構(gòu)師具備軟件和硬件的功能和性能的過硬知識(shí),是架

構(gòu)設(shè)計(jì)工作中最為困難的工作。架構(gòu)的兩要素:元件劃分和設(shè)計(jì)決定。元件劃分

一個(gè)軟件系統(tǒng)中的元件首先是邏輯元件。這些邏輯元件如何放到硬件上,以

及這些元件如何為整個(gè)系統(tǒng)的可擴(kuò)展性、可靠性、強(qiáng)壯性、靈活性、性能等

做出貢獻(xiàn),是非常重要的信息。設(shè)計(jì)決定

進(jìn)行軟件設(shè)計(jì)需要做出的決定中,必然會(huì)包括邏輯結(jié)構(gòu)、物理結(jié)構(gòu),以及它

們?nèi)绾斡绊懙较到y(tǒng)的所有非功能性特征。這些決定中會(huì)有很多是一旦作出,

就很難更改的。17視圖可以表示系統(tǒng)的整體設(shè)計(jì),但構(gòu)架與以下幾個(gè)具體方面相關(guān):

模型的結(jié)構(gòu),即組織模式,例如分層。

基本元素,即關(guān)鍵用例、主類、常用機(jī)制等,它們與模型中的各元素相對(duì)。幾個(gè)關(guān)鍵場(chǎng)景,它們表示了整個(gè)系統(tǒng)的主要控制流程。

記錄模塊度、可選特征、產(chǎn)品線狀況的服務(wù)。

構(gòu)架視圖在本質(zhì)上是整體設(shè)計(jì)的抽象或簡(jiǎn)化,它們通過舍棄具體細(xì)節(jié)來突

出重要的特征。在考慮以下方面時(shí),這些特征非常重要:

系統(tǒng)演進(jìn),即進(jìn)入下一個(gè)開發(fā)周期。

在產(chǎn)品線環(huán)境下復(fù)用構(gòu)架或構(gòu)架的一部分。

評(píng)估補(bǔ)充質(zhì)量,例如性能、可用性、可移植性和安全性。

向團(tuán)隊(duì)或分包商分配開發(fā)工作。

決定是否包括市售構(gòu)件。

插入范圍更廣的系統(tǒng)。

構(gòu)架重點(diǎn)

182.模式Pattern19模式簡(jiǎn)介要素背景context問題problem作用力(約束)force解決方案solution202.1模式定義POSA1的定義:Apatternforsoftwarearchitecturedescribesaparticularrecurringdesignproblemthatariseinspecificdesigncontexts,andpresentsawell-provengenericschemeforitssolution.Thesolutionschemeisspecifiedbyitsconstituentcomponents,theirrelationships,andthewaysinwhichtheycollaborate.21模式的特性最佳實(shí)踐的記錄更高一級(jí)的抽象設(shè)計(jì)的公共詞匯表記錄軟件架構(gòu)的工具支持具有良好屬性的軟件構(gòu)建與項(xiàng)目細(xì)節(jié),實(shí)現(xiàn)方法,編程語言無關(guān)22例子:簡(jiǎn)單的模式ExplicitInterface(顯式接口)背景軟件架構(gòu)工作的主要關(guān)注點(diǎn)之一:有效恰當(dāng)?shù)乇硎鼋M件接口問題一個(gè)組件代表一個(gè)自含的功能單位及其發(fā)布的使用契約.客戶可以使用它來建立自己的功能,但是直接訪問組件的完全實(shí)現(xiàn),則會(huì)導(dǎo)致客戶依賴組件的內(nèi)部表示,最終增加了應(yīng)用程序內(nèi)部的耦合度作用力(force)客戶只能依賴組件發(fā)布的接口,對(duì)實(shí)現(xiàn)的修改不能影響客戶客戶不倚賴組件的地理位置組件提供的方法對(duì)客戶有意義,能有效正確使用將組件接口的聲明與實(shí)現(xiàn)分離,只對(duì)客戶曝露組件接口,同時(shí)隱藏實(shí)現(xiàn)和位置23Method_Bmethod_AExplicitInterface

(顯式接口)method_B_impmethod_A_imp客戶接口實(shí)現(xiàn)多態(tài)分派組件24誤解與陷阱企圖將所有軟件開發(fā)活動(dòng)和工件變成模式企圖將每個(gè)新穎的和復(fù)雜的設(shè)計(jì)貼上模式的標(biāo)簽將模式看成一些固定不變的事物:如特定的類配置將模式看作編碼指南有限或誤解的模式詞匯導(dǎo)致對(duì)給定問題使用了錯(cuò)誤的模式企望機(jī)械應(yīng)用模式就可以得到精致的架構(gòu)25誤解與陷阱企圖在需要新思想的軟件開發(fā)中使用現(xiàn)成模式對(duì)模式如何起作用以及怎樣起作用企望過高企圖完全基于自動(dòng)化工具使用模式將模式當(dāng)作組件的簡(jiǎn)單集合認(rèn)為基于模式的設(shè)計(jì)排斥或替代重構(gòu)262.2模式分類按粒度分類架構(gòu),設(shè)計(jì),慣用法按效果好壞分類模式,反模式按問題域(使用目的)分類(以分布式計(jì)算為例)從混沌到結(jié)構(gòu)分布式基礎(chǔ)設(shè)施事件多路分離和分派接口分割組件分割27應(yīng)用程序控制并發(fā)同步對(duì)象交互適配與擴(kuò)展模態(tài)(modal)行為資源管理(對(duì)象生命周期管理)數(shù)據(jù)庫訪問3.常用模式28常用模式從混沌到結(jié)構(gòu)分布式基礎(chǔ)設(shè)施事件多路分離和分派接口分割組件分割應(yīng)用程序控制并發(fā)同步對(duì)象交互適配與擴(kuò)展模態(tài)(modal)行為資源管理數(shù)據(jù)庫訪問293.1從混沌到結(jié)構(gòu)303.1從混沌到結(jié)構(gòu)從混沌到結(jié)構(gòu)將需求和約束轉(zhuǎn)換為粗粒度的軟件結(jié)構(gòu)各部分定義清晰,可操作抽象與劃分,忽略細(xì)節(jié)關(guān)注性能,持續(xù)可用性可擴(kuò)展性,可維護(hù)性支持變化313.1從混沌到結(jié)構(gòu)

領(lǐng)域建模滿足應(yīng)用領(lǐng)域的功能性需求,同時(shí)適應(yīng)變化功能屬性業(yè)務(wù)流程業(yè)務(wù)算法選擇Domain

Model32DomainModel(領(lǐng)域模型)背景為應(yīng)用建立初始結(jié)構(gòu)問題需求和約束只是隱含了功能,但還不能為應(yīng)用提供直接具體的開發(fā)結(jié)構(gòu)對(duì)系統(tǒng)范圍和應(yīng)用領(lǐng)域缺乏精確和合理的洞見,會(huì)使實(shí)現(xiàn)成為一團(tuán)爛泥,難于理解,難于開發(fā),不易交付作用力(force)需求列表只是應(yīng)用的問題域,而不是解域,需要映射為軟件實(shí)體建立一個(gè)模型,定義系統(tǒng)的業(yè)務(wù)職責(zé)范圍以及可能的變化:模型元素是對(duì)應(yīng)用領(lǐng)域的概念抽象,它們的角色和交互反映了應(yīng)用領(lǐng)域的工作流33從混沌到結(jié)構(gòu)分解領(lǐng)域模型應(yīng)用與環(huán)境怎樣交互?應(yīng)用怎樣處理數(shù)據(jù)?應(yīng)用支持什么變化?應(yīng)用的預(yù)期生命周期如何?34DomainModel(領(lǐng)域模型)內(nèi)部劃分?jǐn)?shù)據(jù)流處理數(shù)據(jù)驅(qū)動(dòng)處理系統(tǒng)演進(jìn)用戶界面變化功能變化遠(yuǎn)程通信DomainModelDomainObjectPipesandFiltersSharedRepositoryBlackboardLayersDatabaseAccessLayerModel-View-ControllerPresentationAbstraction-ControlMicrokernelReflectionBrokerMessagingPublisher-Subscriber35Layers(分層)背景必須支持系統(tǒng)的不同部分獨(dú)立開發(fā)和演進(jìn)問題由于受系統(tǒng)大小,上市時(shí)間等需求約束,需要考慮系統(tǒng)不同部分的獨(dú)立開發(fā)和演進(jìn)如果系統(tǒng)架構(gòu)不能清晰合理分離關(guān)注點(diǎn),則各部分的交互得不到很好的支持,也不能獨(dú)立開發(fā)作用力(force)如何尋求平衡,能夠合理劃分系統(tǒng),使各部分可以獨(dú)立開發(fā)和部署不陷于細(xì)節(jié)的泥淖對(duì)開發(fā)中的系統(tǒng)定義一個(gè)或多個(gè)層級(jí),每一層都具有清晰特定的職責(zé)36Layers(分層)Function1Function1Function1FunctionAFunctionBFunctionCFunctionXFunctionYFunctionZ接口實(shí)現(xiàn)Layer3Layer2Layer1典型應(yīng)用:TCP/IP等通信協(xié)議37Layers(分層)可沿不同維度指定分層的準(zhǔn)則抽象,粒度,硬件距離,變化速度層數(shù)適當(dāng)注意層中每個(gè)內(nèi)聚的職責(zé)層內(nèi)如何隔離變化控制和數(shù)據(jù)流可以在層間雙向流動(dòng)層間依賴關(guān)系是單向向下的:下層不能依賴上層的功能38Layers:問題層內(nèi)分解接口和實(shí)現(xiàn)分離

連接借口和實(shí)現(xiàn)自底向上層間通信Layers????什么模式可以提供解決方案?39Model-View-Controller(MVC)背景要考慮應(yīng)用的用戶界面比領(lǐng)域功能變化快問題用戶界面比應(yīng)用的核心功能變化快,但界面的變化不能對(duì)核心功能造成不良影響作用力用戶界面的改變應(yīng)該容易,并局限于系統(tǒng)界面部分界面顯示的內(nèi)容要與內(nèi)部狀態(tài)一致,能立即響應(yīng)內(nèi)部狀態(tài)的變化對(duì)支持多種skin外觀的系統(tǒng),每種skin的變化快慢不一樣將交互式系統(tǒng)劃分為解耦的三部分:處理,輸入和輸出.通過某種變化傳播機(jī)制保證三部分狀態(tài)的一致40Model-View-Controller(MVC)displayupdatedosomethingupdategetdatafunction2function1data1data2data3notifyUserInterfaceModelViewController1.invoke2.modify3.startchangenotification4.notify5.updatestateApplicationFunctionality41Presentation-Abstraction-Control(PAC)背景有時(shí)要考慮應(yīng)用的不同功能職責(zé)需要不同范式的用戶界面問題通過一種界面如表單,菜單,對(duì)話框等,應(yīng)用程序就可以提供人機(jī)交互,但是有時(shí)候某些應(yīng)用程序需要對(duì)不同的功能提供不同范式的界面,以達(dá)到最佳的操作性作用力(force)比如在機(jī)器人控制系統(tǒng)中,定義某項(xiàng)任務(wù)和控制機(jī)器人完成該任務(wù)需要不同的用戶界面,但是必須保證所有的功能及其對(duì)應(yīng)的用戶界面內(nèi)聚一致某一界面的改變不能影響其對(duì)應(yīng)的功能和其他功能-界面某一功能實(shí)現(xiàn)的改變也不能影響其對(duì)應(yīng)的界面和其他的功能-界面將交互式應(yīng)用劃分為解耦的代理agents層級(jí)結(jié)構(gòu):一個(gè)頂層根代理,幾個(gè)中間級(jí)代理,以及許多底層代理.每個(gè)代理完成應(yīng)用的某項(xiàng)功能,并提供對(duì)應(yīng)的用戶界面42Presentation-Abstraction-Control(PAC)dosomethingdisplaymediatefunction_2function_1PresentationControlAbstractiondosomethingdisplaymediatefunction_2function_1dosomethingdisplaymediatefunction_2function_1dosomethingdisplaymediatefunction_2function_1dosomethingdisplaymediatefunction_2function_1協(xié)調(diào)協(xié)調(diào)協(xié)調(diào)協(xié)調(diào)頂層PACAgent中間層PACAgent底層PACAgent43MVCandPAC:問題用戶界面分離視圖種類控制器種類請(qǐng)求處理用戶界面分離變化傳播模型劃分?jǐn)?shù)據(jù)交換OS/庫獨(dú)立變化傳播代理劃分?jǐn)?shù)據(jù)交換請(qǐng)求路由控制設(shè)計(jì)子系統(tǒng)設(shè)計(jì)Model-ViewControllerPresentationAbstractionControlDomainModel??????什么模式可以提供解決方案?44Microkernel(微內(nèi)核)背景設(shè)計(jì)支持不同部署環(huán)境下功能的可伸縮性和的適應(yīng)性問題某些系統(tǒng)有多個(gè)版本,每個(gè)版本或者提供不同的功能集,或者在某一方面與前一版本不同.但是所有的版本應(yīng)該基于共同的架構(gòu)和核心功能作用力(force)避免架構(gòu)在不同版本間產(chǎn)生漂移,使共享功能的開發(fā)和維護(hù)代價(jià)降到最小應(yīng)用的版本升級(jí)不需要修改系統(tǒng),或使修改降到最小方便地提供針對(duì)不同界面,不同平臺(tái)的版本,以滿足客戶的環(huán)境提供一個(gè)公用的最小的核心架構(gòu).應(yīng)用的不同版本通過一種即插即用的基礎(chǔ)設(shè)施,在此架構(gòu)上進(jìn)行擴(kuò)展.45Microkernel(微內(nèi)核)routerequestregister_svrunregister_svrfunction_1function_2function_3displaydosomethingfunction_2function_1function_3ExternalServer(GUI)ExternalServer(API)MicrokernelInternalServerSystemUser46Microkernel:問題標(biāo)準(zhǔn)和可選功能分離微內(nèi)核以及內(nèi)部服務(wù)器劃分微內(nèi)核以及內(nèi)部服務(wù)器劃分?jǐn)?shù)據(jù)交換外部服務(wù)器設(shè)計(jì)微內(nèi)核配置請(qǐng)求路由MicrokernelLayers?????什么模式可以提供解決方案?47Reflection(反射)背景提供一種設(shè)計(jì),為預(yù)期之外變化的演進(jìn)和集成做準(zhǔn)備問題對(duì)長生命周期應(yīng)用,支持變化是可持續(xù)演進(jìn)架構(gòu)的關(guān)鍵.但是通常很難預(yù)測(cè)什么會(huì)變化以及什么時(shí)候發(fā)生變化.作用力(force)變化可能在任何時(shí)候發(fā)生變化可能在任何尺度上發(fā)生對(duì)維護(hù)者隱藏變化的復(fù)雜性,提供統(tǒng)一的機(jī)制支持各種變化將屬性,應(yīng)用的結(jié)構(gòu)、行為以及狀態(tài)等的易變方面抽象為一組元對(duì)象.使用兩層架構(gòu)分離元對(duì)象和核心應(yīng)用邏輯:元層次包含元對(duì)象,基本層包含應(yīng)用邏輯.48Reflection(反射)Userconfigureaspectconfigurepropertyproperty_1MetalobjectProtocolMaintaineraspect_2Metalobjectsdosomethingfunction_1UserInterfacefunction_1CoreApplicationLogicusesusesMetalLevelBaseLevel49Reflection:問題監(jiān)管控制與應(yīng)用功能分離基本層以及元層的劃分元層訪問元對(duì)象生命周期管理ReflectionDomainModel???什么模式可以提供解決方案?50PipesandFilters(管道-過濾器)背景提供一種設(shè)計(jì),使應(yīng)用適合處理數(shù)據(jù)流問題某些應(yīng)用需要處理數(shù)據(jù)流:輸入數(shù)據(jù)逐級(jí)變換為輸出數(shù)據(jù)流.使用通常的請(qǐng)求/應(yīng)答式結(jié)構(gòu)不可行,為此要建立一種數(shù)據(jù)流模型.作用力(force)系統(tǒng)的各部分對(duì)數(shù)據(jù)流執(zhí)行明確的不同的動(dòng)作有些時(shí)候需要顯式訪問中間數(shù)據(jù)結(jié)果數(shù)據(jù)流模型應(yīng)該支持增量式讀寫和處理持續(xù)時(shí)間長的處理不應(yīng)成為性能瓶頸將應(yīng)用任務(wù)劃分為幾個(gè)自含的數(shù)據(jù)處理步驟,這些步驟通過其間的數(shù)據(jù)緩沖區(qū)連接成一個(gè)數(shù)據(jù)處理管道.51inputPipesandFilters(管道-過濾器)bufferinputbufferinputInputDeviceOutputDeviceFilter1Pipe1Filter2Filter2PipeN-1FilterN52PipesandFilters:問題層間通過數(shù)據(jù)流交互管道以及過濾器的劃分遠(yuǎn)程通信數(shù)據(jù)交換PipesandFiltersDomainModel???什么模式可以提供解決方案?53SharedRepository(共享倉庫)背景提供一種設(shè)計(jì),使應(yīng)用的各部分操作一組共享數(shù)據(jù),并通過共享數(shù)據(jù)進(jìn)行協(xié)調(diào)問題某些應(yīng)用本質(zhì)上使數(shù)據(jù)驅(qū)動(dòng)的:組件之間的交互不是通過特定的業(yè)務(wù)流程,而是依賴其所處理的數(shù)據(jù).即便如此,仍然需要一種機(jī)制來控制這種交互.作用力(force)比如網(wǎng)絡(luò)管理和控制系統(tǒng),它們需要操作大量現(xiàn)場(chǎng)數(shù)據(jù).其核心職責(zé)如監(jiān)控,報(bào)警,匯報(bào)等相互獨(dú)立,是數(shù)據(jù)狀態(tài)決定了任務(wù)流程及其交互.將這些任務(wù)直接聯(lián)系起來會(huì)導(dǎo)致硬編碼的業(yè)務(wù)流程為所有數(shù)據(jù)維持一個(gè)中心倉庫,以供各功能組件共享.數(shù)據(jù)的可用性,質(zhì)量以及狀態(tài)等觸發(fā)和協(xié)調(diào)應(yīng)用的控制流.54SharedRepository(共享倉庫)ApplicationComponentsfunction_1function_2function_3function_4SharedRepositoryOperateson55Blackboard(黑板)背景提供一種設(shè)計(jì),使應(yīng)用在沒有確定性解決方案的時(shí)候可以完成任務(wù)問題某些任務(wù)沒有確定性算法,但是試誤技術(shù)足夠勝任,因此需要開發(fā)針對(duì)這種任務(wù)的軟件產(chǎn)品.作用力(force)輸入的數(shù)據(jù)模糊不精確需要探索各種方案路徑,每個(gè)中間步驟都可能產(chǎn)生可選結(jié)果,通常不知道最佳解在合理的時(shí)間內(nèi),計(jì)算出有價(jià)值的解決方案運(yùn)用啟發(fā)式計(jì)算,通過多個(gè)具有確定性算法的組件,對(duì)假定的中間解決方案逐步改進(jìn).56Blackboard(黑板)checkactivatecheckactivatecheckactivateIntermediateSolutionHypothesis1------------IntermediateSolutionHypothesis2----------IntermediateSolutionHypothesis3KnowledgeSourcesBlackboardrunControl.1.確定最佳的知識(shí)源,以修改黑板中的數(shù)據(jù)2.激活選中的知識(shí)源,使之修改黑板中的數(shù)據(jù)57Blackboard,SharedRepository:問題分離數(shù)據(jù)與功能分離數(shù)據(jù)與功能傳播變化線程安全數(shù)據(jù)訪問功能劃分?jǐn)?shù)據(jù)訪問數(shù)據(jù)交換數(shù)據(jù)交換數(shù)據(jù)訪問功能劃分SharedRepositoryBlackboardDomainModel???什么模式可以提供解決方案?58DomainObject(領(lǐng)域?qū)ο?背景所有設(shè)計(jì)的關(guān)鍵:分離應(yīng)用職責(zé),每個(gè)職責(zé)應(yīng)自我包含,內(nèi)聚問題組成軟件的各部分具有復(fù)雜的相互作用,未經(jīng)仔細(xì)設(shè)計(jì)會(huì)導(dǎo)致系統(tǒng)結(jié)構(gòu)極其復(fù)雜作用力(force)關(guān)注點(diǎn)分離,適當(dāng)合理的劃分系統(tǒng)不同部分的實(shí)現(xiàn)和交互必須有效且高效,特別是關(guān)鍵屬性如性能,錯(cuò)誤處理以及安全性等將每個(gè)不同的功能封裝進(jìn)一個(gè)自我包含的構(gòu)成塊—DomainObject(領(lǐng)域?qū)ο?中59DomainObject(領(lǐng)域?qū)ο?FunctionAFunctionBFunctionCFunctionZDomainObject1FunctionXFunctionYDomainObject2DomainObject3DomainObject4DomainObjectInterfaceDomainObjectImplementation60DomainObject(領(lǐng)域?qū)ο?分離接口和實(shí)現(xiàn)內(nèi)部劃分內(nèi)部劃分通用領(lǐng)域?qū)ο筮B接接口和實(shí)現(xiàn)生命周期控制領(lǐng)域?qū)ο笈渲肈omainObjectDomainModelLayersModel-View-ControllerPresentationAbstractionControlMicrokernelReflectionPipesandFiltersSharedRepositoryBlackboard?????什么模式可以提供解決方案?613.2分布式基礎(chǔ)設(shè)施62分布式基礎(chǔ)設(shè)施分布式基礎(chǔ)設(shè)施軟件是一種中間件(middleware)應(yīng)用程序之下,操作系統(tǒng)和網(wǎng)絡(luò)之上屏蔽來自不同操作系統(tǒng)和網(wǎng)絡(luò)的固有復(fù)雜性和偶發(fā)復(fù)雜性固有復(fù)雜性:選擇合適的通信機(jī)制,并設(shè)計(jì)良好的協(xié)議來有效使用這些機(jī)制設(shè)計(jì)合理的網(wǎng)絡(luò)服務(wù),以有效利用現(xiàn)有計(jì)算資源,并降低將來的維護(hù)成本有效使用并發(fā)機(jī)制,使系統(tǒng)獲得可預(yù)計(jì)的,可靠的高性能管理和配置服務(wù),以獲得最大程度的系統(tǒng)可用性和靈活性63偶發(fā)復(fù)雜性:缺乏類型安全,可移植,可擴(kuò)充的原始OSAPI算法分解的廣泛使用,無謂造成網(wǎng)絡(luò)應(yīng)用程序在維護(hù)和擴(kuò)充上的困難網(wǎng)絡(luò)應(yīng)用中,核心概念和功能的不斷發(fā)現(xiàn)和創(chuàng)造,造成軟件生命周期的成本無謂地居高不下有各種中間件可供選擇CORBA,.NetRemoting,theMicrosoftCommunicationFramework,JMS……了解這些中間件使用的設(shè)計(jì)模式,有助于選擇正確的中間件這些中間件使用了三種基本的通信方式:messaging,publish/subscribe,remotemethodinvocation,基本上對(duì)應(yīng)三種模式分布式基礎(chǔ)設(shè)施64分布式基礎(chǔ)設(shè)施模式通信方式通信關(guān)系組件依賴性Broker(代理者)遠(yuǎn)程方法調(diào)用一對(duì)一組件接口Messaging(消息傳遞)消息多對(duì)一通訊終點(diǎn),消息格式Publisher-Subscriber(發(fā)布者-訂閱者)事件一對(duì)多事件格式65Messaging(消息傳遞)背景需要一個(gè)通信的基礎(chǔ)設(shè)施,將獨(dú)立開發(fā)的服務(wù)組成一個(gè)統(tǒng)一的系統(tǒng)問題某些分布式系統(tǒng)是由獨(dú)立開發(fā)的服務(wù)組成,這些服務(wù)必須可靠地交互,但又不能導(dǎo)致過緊的依賴關(guān)系作用力(force)集成現(xiàn)有的、獨(dú)立的特定服務(wù)以構(gòu)成企業(yè)級(jí)解決方案被集成的服務(wù)需要可靠地協(xié)調(diào)工作,但這些服務(wù)是獨(dú)立開發(fā)的,并不知道彼此的功能接口每個(gè)服務(wù)可能要被多個(gè)集成環(huán)境使用,服務(wù)對(duì)不同的集成環(huán)境不能具有排他性將服務(wù)通過一個(gè)消息總線連接起來,并通過它異步傳輸數(shù)據(jù)消息.對(duì)消息編碼,使發(fā)送者和接受者能夠可靠地通信,而不需要知道數(shù)據(jù)的所有靜態(tài)類型信息.66Messaging(消息傳遞)MessageBusService1Service2Service3Service4datamsg1datamsg2datamsg3datamsg4關(guān)鍵應(yīng)用:EnterpriseApplicationIntegration,ServiceOrientedArchitecture67Messaging(消息傳遞)

Publisher-Subscriber(發(fā)布者-訂閱者):問題進(jìn)程間通信進(jìn)程間通信數(shù)據(jù)轉(zhuǎn)移數(shù)據(jù)封裝數(shù)據(jù)格式轉(zhuǎn)換數(shù)據(jù)路由錯(cuò)誤通知MessagingPublisher-SubscriberDomainModel組件連接數(shù)據(jù)格式轉(zhuǎn)換數(shù)據(jù)路由錯(cuò)誤通知事件封裝事件轉(zhuǎn)移組件連接事件過濾???什么模式可以提供解決方案?68Publisher-Subscriber(發(fā)布者-訂閱者)背景需要一種通信基礎(chǔ)設(shè)施,當(dāng)某事件發(fā)生時(shí),系統(tǒng)中感興趣的組件可以彼此通告問題某些分布式系統(tǒng)是由松散耦合,基本獨(dú)立的組件構(gòu)成.如果這種系統(tǒng)需要在各組件間傳播信息,則需要某種機(jī)制來通知各組件有關(guān)系統(tǒng)狀態(tài)的變化,或其他事件,這些事件會(huì)影響各組件本身的計(jì)算或組件間的協(xié)調(diào)工作作用力(force)通告機(jī)制不能造成各組件的耦合過于緊密接收事件的那些組件只知道系統(tǒng)中有某個(gè)組件處于特定狀態(tài),但不關(guān)心具體是哪個(gè)組件處于該狀態(tài)散布事件的組件也不關(guān)心哪個(gè)組件會(huì)接收它各組件不知道彼此的位置定義一種變化傳播基礎(chǔ)設(shè)施,發(fā)布者(publisher)通過它發(fā)布事件,其他發(fā)布者可能對(duì)該事件包含的信息感興趣.事件發(fā)生時(shí)要告知對(duì)該事件感興趣的訂閱者(subscriber).69ChangePropagationInfrastructurePublisher1Subscriber2Subscriber3Publisher2StatechangeStatechangeStatechangeStatechangePublisher-Subscriber(發(fā)布者-訂閱者)應(yīng)用:CORBANotificationService70Messaging(消息傳遞)

Publisher-Subscriber(發(fā)布者-訂閱者):問題進(jìn)程間通信進(jìn)程間通信數(shù)據(jù)轉(zhuǎn)移數(shù)據(jù)封裝數(shù)據(jù)格式轉(zhuǎn)換數(shù)據(jù)路由錯(cuò)誤通知MessagingPublisher-SubscriberDomainModel組件連接數(shù)據(jù)格式轉(zhuǎn)換數(shù)據(jù)路由錯(cuò)誤通知事件封裝事件轉(zhuǎn)移組件連接事件過濾???什么模式可以提供解決方案?71Broker(代理者)背景需要一種通信基礎(chǔ)設(shè)施,以之屏蔽組件位置和進(jìn)程間通信的復(fù)雜性問題分布式應(yīng)用要面對(duì)許多單進(jìn)程應(yīng)用未有的挑戰(zhàn),但是應(yīng)用不應(yīng)該自己直接去處理這些挑戰(zhàn).應(yīng)用應(yīng)該使用模塊化的編程模型,力求簡(jiǎn)化,以屏蔽網(wǎng)絡(luò)連接和空間位置等細(xì)節(jié)作用力(force)將不同語言寫的各類服務(wù)移植到不同的操作系統(tǒng)平臺(tái),是一項(xiàng)極其復(fù)雜的任務(wù)在何處以什么方式部署服務(wù),也是一項(xiàng)復(fù)雜費(fèi)力的事情服務(wù)之間通過方法調(diào)用的協(xié)作應(yīng)該以一種與位置無關(guān)的方式進(jìn)行使用代理者(broker)聯(lián)盟封裝分布式系統(tǒng)通信基礎(chǔ)設(shè)施的細(xì)節(jié),并與應(yīng)用系統(tǒng)的功能分離.要定義一種基于組件的編程模型,以使客戶應(yīng)用調(diào)用遠(yuǎn)程服務(wù)的方法時(shí)就象在本地調(diào)用一樣.72method_1method_2Broker(代理者)sendreceiverequestdiscoverreceivesendinvokeregistermethod_1method_2clientClientProxyClient-sideBrokerServer-sideBrokerApplicationComponentDiscoverclientproxyRegistercomponentNetwork73Broker(代理者):問題進(jìn)程間通信BrokerDomainObject請(qǐng)求分派請(qǐng)求分派代理者訪問組件訪問組件訪問發(fā)布-訂閱通信組件創(chuàng)建內(nèi)部劃分OS抽象發(fā)出請(qǐng)求接收請(qǐng)求封裝請(qǐng)求錯(cuò)誤通知代理者配置組件發(fā)現(xiàn)??什么模式可以提供解決方案?743.3事件多路分離和分派分布式計(jì)算的核心:響應(yīng)和處理來自網(wǎng)絡(luò)的事件事件處理的復(fù)雜性:事件異步到達(dá)多個(gè)事件同時(shí)到達(dá)事件到達(dá)順序不確定多種類型的事件隱藏事件多路分離和分派的復(fù)雜性事件處理軟件通常采用Layers架構(gòu)模式

事件源:

sockets事件多路分離器:WaitForMultipleObjects,select,etal事件處理器+應(yīng)用程序75事件多路分離和分派模式提供高效,可擴(kuò)展,可復(fù)用解決方案Reactor(反應(yīng)器)模式對(duì)事件執(zhí)行同步多路分離并分派給應(yīng)用程序Proactor(前攝器)模式對(duì)事件執(zhí)行異步多路分離和分派,可獲得并發(fā)處理的好處并規(guī)避其缺點(diǎn)Acceptor-Connector(接收器-連接器)模式將連接和初始化工作與其后的一般事件處理分離AsynchronousCompletionToken(異步完成令牌)模式對(duì)異步服務(wù)請(qǐng)求的響應(yīng)提供高效的多路分離和處理76Reactor(反應(yīng)器)背景開發(fā)事件驅(qū)動(dòng)應(yīng)用時(shí),需要將事件的檢測(cè),多路分離和分派等與處理時(shí)間短的服務(wù)分離問題事件驅(qū)動(dòng)軟件接受來自多個(gè)源的服務(wù)請(qǐng)求事件,并對(duì)之實(shí)行多路分離,分派給事件處理器做進(jìn)一步處理.多個(gè)事件可能同時(shí)到達(dá),但是為簡(jiǎn)化軟件開發(fā),這些事件需要順序處理,并同步返回處理結(jié)果.作用力(force)高效靈活處理多個(gè)源的并發(fā)事件容易集成新的或改進(jìn)的事件處理器提供一種事件處理基礎(chǔ)設(shè)施,它可以同時(shí)等待多個(gè)源的服務(wù)請(qǐng)求事件,但是每次只分離一個(gè)事件,并將該事件分派給相應(yīng)的事件處理器去執(zhí)行對(duì)應(yīng)的服務(wù)77eventloopReactor(反應(yīng)器)Aclientdemuxeventevent_loop()begin##runaninfiniteeventloopfor(ever)##blockwaitingforeventstooccurevent=demux_events();##dispatchtheeventhandler=identify_handler(event);handler.handle_event(event);rofendhandleeventhandleeventhandleeventEventhandlersStarteventprocessingReactorOperatingSystemSendservicerequestevent132478Proactor(前攝器)背景開發(fā)事件驅(qū)動(dòng)應(yīng)用時(shí),需要將事件的檢測(cè),多路分離和分派等與處理時(shí)間長的服務(wù)分離問題為獲得高性能和高吞吐量,事件驅(qū)動(dòng)軟件需要同時(shí)處理多個(gè)事件,但是又不希望使用多線程作用力(force)對(duì)服務(wù)請(qǐng)求的處理不能延遲太久性能和吞吐量要最大化容易集成新的和改進(jìn)的組件將應(yīng)用程序功能分為異步操作和完成處理器兩部分.異步操作針對(duì)事件源執(zhí)行某些活動(dòng),而完成處理器使用異步操作的結(jié)果.異步操作和完成處理器共同實(shí)現(xiàn)應(yīng)用的服務(wù)邏輯.異步操作由操作系統(tǒng)執(zhí)行,而完成處理器在應(yīng)用的控制線程中執(zhí)行79eventloopProactor(前攝器)Aclientdemuxeventhandle_event(Eventevent)begin##Processthereceivedeventif(event.type==Request)##readrequestasynchronously##andreturncontrolasync_read();

elseif(event.Type==READ_COMPLETE)##Processevent,deliverresults##asynchronously,andreturncontrolprocess_data();async_write();fiendhandleeventhandleeventCompletionhandlersStarteventprocessingProactorOperatingSystemSendservicerequestevent1324asyncwriteasyncread80Reactor(反應(yīng)器),Proactor(前攝器):問題ReactorProactorServerRequestHandlerClientRequestHandler同步事件處理異步事件處理異步事件處理同步事件處理實(shí)現(xiàn)的變化實(shí)現(xiàn)的變化事件處理器類型事件處理器類型事件源封裝事件源封裝并發(fā)事件處理并發(fā)事件處理并發(fā)事件處理事件處理器分派完成處理器分派???什么模式可以提供解決方案?81Acceptor-Connector(接受器-連接器)背景在面向連接的網(wǎng)絡(luò)系統(tǒng)中實(shí)現(xiàn)事件處理器時(shí),建立連接以及初始化事件處理器等基本活動(dòng)需要與處理應(yīng)用特定服務(wù)的功能分離問題網(wǎng)絡(luò)系統(tǒng)中對(duì)等的事件處理器在執(zhí)行其服務(wù)功能前需要先建立連接并初始化,建立連接以及初始化代碼與其服務(wù)功能基本無關(guān)作用力(force)事件處理器服務(wù)的變化比連接建立和初始化策略的變化快事件處理器可能動(dòng)態(tài)改變其在連接中的角色在網(wǎng)絡(luò)系統(tǒng)中,將對(duì)等事件處理器的連接和初始化與之后執(zhí)行的服務(wù)解耦82connect134serviceinitAcceptor-Connector(接受器-連接器)acceptserviceinitconnectoracceptorServicehandlerConnect‘me’Passconnection3PassconnectionPerformwork2AcceptconnectionServicehandlerApeercomponentAnotherpeercomponent83Acceptor-Connector(接受器-連接器):問題Acceptor-ConnectorServerRequestHandlerClientRequestHandlerProactor事件處理器類型Reactor事件處理器類型完成處理器類型創(chuàng)建服務(wù)處理器封裝IPC機(jī)制管理事件處理器連接管理的變化并發(fā)服務(wù)處理器??84AsynchronousCompletionToken

(異步完成令牌)背景在使用異步通信的系統(tǒng)中,需要高效地多路分離和處理對(duì)異步服務(wù)請(qǐng)求的響應(yīng)問題客戶端異步調(diào)用服務(wù),其響應(yīng)通過完成事件返回,并在客戶端處理.客戶端調(diào)用服務(wù)后不能被阻塞,客戶端在完成事件到達(dá)時(shí)的狀態(tài)與調(diào)用服務(wù)時(shí)的狀態(tài)不同作用力(force)客戶需要在合適的背景下處理異步響應(yīng)客戶判斷如何處理異步響應(yīng)的時(shí)間要盡可能短異步響應(yīng)到達(dá)的順序與請(qǐng)求發(fā)起的順序可能不同客戶在發(fā)起每個(gè)異步服務(wù)請(qǐng)求的同時(shí),傳輸一個(gè)異步完成令牌,該令牌包含足夠的信息,可以讓客戶知道如何處理服務(wù)完成后的返回結(jié)果85dispatch134dispatchserviceAsynchronousCompletionToken

(異步完成令牌)Client2processresultasync_operationSendrequestReturnresponseDispatchresultProcessresultACTService86AsynchronousCompletionToken

(異步完成令牌):問題AsynchronousCompletionTokenFuture未來通告完成處理器通告ProactorACT管理?873.4接口分割組件接口要告知客戶其職責(zé),提供的服務(wù),以及使用契約利于客戶正確有效地與之合作設(shè)計(jì)高質(zhì)量的組件接口,需要解決的問題組件的職責(zé)與契約規(guī)范質(zhì)量屬性描述性和簡(jiǎn)單性松耦合和穩(wěn)定性組件的分布性組件及其客戶的異質(zhì)性88接口分割相關(guān)模式ExplicitInterface(顯式接口)ExtensionInterface(擴(kuò)展接口)IntrospectiveInterface(內(nèi)省接口)DynamicInvocationInterface(動(dòng)態(tài)調(diào)用接口)BusinessDelegate(業(yè)務(wù)代理)Proxy(代理)Fa?ade(外觀)CombinedMethod(組合方法)Iterator(迭代器)EnumerationMethod(枚舉方法)BatchMethod(批處理方法)89ExplicitInterface(顯式接口)背景軟件架構(gòu)工作的主要關(guān)注點(diǎn)之一:有效恰當(dāng)?shù)乇硎鼋M件接口問題一個(gè)組件代表一個(gè)自含的功能單位及其發(fā)布的使用契約.客戶可以使用它來建立自己的功能,但是直接訪問組件的完全實(shí)現(xiàn),則會(huì)導(dǎo)致客戶依賴組件的內(nèi)部表示,最終增加了應(yīng)用程序內(nèi)部的耦合度作用力(force)客戶只能依賴組件發(fā)布的接口,對(duì)實(shí)現(xiàn)的修改不能影響客戶客戶不倚賴組件的地理位置組件提供的方法對(duì)客戶有意義,能有效正確使用將組件接口的聲明與實(shí)現(xiàn)分離,只對(duì)客戶曝露組件接口,同時(shí)隱藏實(shí)現(xiàn)和位置90Method_Bmethod_AExplicitInterface(顯式接口)method_B_impmethod_A_impClientInterfaceImplementationPolymorphicdispatchComponent91ExplicitInterface(顯式接口):問題ExplicitInterfaceDomainObjectReactorProactorCommandInterceptorChainofResponsibilityIteratorBridgeCompositeObjectAdapterLayersDecoratorStrategyObserverCommandContainerActiveObjectVisitor接口設(shè)計(jì)接口類型參數(shù)封裝同步訪問安全訪問執(zhí)行方法序列生命周期管理聚合遍歷???92Proxy(代理)背景避免直接訪問組件服務(wù)的實(shí)現(xiàn)問題客戶組件訪問并使用其他組件提供的服務(wù).直接訪問服務(wù)不實(shí)際或不可能:如要檢查客戶的訪問權(quán)限,或者服務(wù)的實(shí)現(xiàn)位于遠(yuǎn)程服務(wù)器上作用力(force)組件的功能與任何“簿記”工作應(yīng)該分離客戶也不應(yīng)該做這些“簿記”工作將組件所有簿記功能封裝進(jìn)一個(gè)代理中,客戶通過代理而不是直接與組件通信93method_AProxy(代理)method_A()begin##dopre-processing

comp:=load_comp_from_DB(compID)##callthemethodonthecomponent

comp.method_A_imp();##dopost-processingunload_comp_from_user_space(compID)endmethod_Bmethod_A_impmethod_B_impClientProxyComponentImplementation94Proxy(代理)

RealSubject+Request()Subject+Request()

Proxy+Request()realSubjectRequest(){realSubject.Request()}

Client95Proxy(代理):問題ProxyExplicitInterface接口類型接口適配代理類型??96Facade(外觀)背景訪問一組組件,這些組件提供范圍比較寬的服務(wù)問題復(fù)雜的服務(wù)通常由一組組件提供,其中每個(gè)組件都有自含的服務(wù),如果客戶為了獲得復(fù)雜的服務(wù)必須顯式保持各組件的相互關(guān)系,則客戶會(huì)依賴于這些組件的內(nèi)部結(jié)構(gòu)作用力(force)客戶通過單一的訪問點(diǎn)訪問一組相關(guān)組件,簡(jiǎn)化一般任務(wù)的調(diào)用和執(zhí)行客戶也可能只訪問組中某個(gè)特定的組件客戶還可能執(zhí)行更復(fù)雜的任務(wù),這些任務(wù)需要直接訪問各個(gè)組件為一組組件指定一個(gè)單一訪問點(diǎn)(facade),它對(duì)一般的服務(wù)請(qǐng)求起協(xié)調(diào)者的作用.客戶也可以繞過它,執(zhí)行特定的更復(fù)雜的服務(wù)請(qǐng)求97method_Bmethod_AFa?ade(外觀)method_C_impmethod_A_impClient1Componentsmethod_CClient2Facade98Facade(外觀)

Facade99Facade(外觀):問題Facade接口類型整體實(shí)現(xiàn)外觀類型ExplicitInterfaceBrokerComponentConfiguratorWhole-Part接口類型?100Iterator(迭代器)背景需要順序訪問組合對(duì)象的各元素,而不曝露對(duì)象的內(nèi)部結(jié)構(gòu)問題客戶通常需要遍歷聚合體中封裝的每個(gè)元素.但是客戶可能不希望依賴聚合體的內(nèi)部結(jié)構(gòu),聚合體也不希望曝露其內(nèi)部結(jié)構(gòu)作用力(force)客戶以最能滿足其需要的特定順序遍歷聚合體并發(fā)訪問:多個(gè)客戶可能同時(shí)訪問聚合體,單個(gè)客戶的多個(gè)線程也可能同時(shí)訪問將訪問和遍歷聚合體元素的策略對(duì)象化,建立迭代器對(duì)象.客戶只能通過迭代器訪問元素,迭代器必要時(shí)可以訪問聚合體內(nèi)部表示101nextcurrentIterator(迭代器)Clientemptyfindcreate_iteratorinsertAggregateinterfaceremovetraversalstateIteratorElementElement12Accesselement34513Obtainiterator2Requestelement4Returnelement5Returnelement102Iterator(迭代器)Aggregate+CreateIterator():IteratorIterator+First():Object+Next():Object+IsDone():boolean+CurrentItem():ObjectCreateIterator(){returnnewConcreteIterator(this)}ConcreteAggregate+CreateIterator():IteratorConcreteIterator+First():Object+Next():Object+IsDone():boolean+CurrentItem():Objectcreates

ClientIC,IP,IQ卡,統(tǒng)統(tǒng)告訴我密碼!----天下無賊103Iterator(迭代器):問題Iterator聚合體遍歷塊訪問生命周期管理CompositeEnumerationMethodExplicitInterfaceObjectManager健壯性???1043.5組件分割軟件由定義良好的組件構(gòu)成,每個(gè)組件通過接口提供特定的,內(nèi)聚的的服務(wù)組件封裝實(shí)現(xiàn)細(xì)節(jié)組件劃分組件質(zhì)量組件靈活性組件功能的分布單個(gè)組件的并發(fā)性良好封裝面臨的挑戰(zhàn)1053.5組件分割相關(guān)模式EncapsulatedImplementation(封裝實(shí)現(xiàn))Whole-Part(部分-整體)Composite(組成)Master-Slave(主從)Half-ObjectPlusProtocol(半對(duì)象協(xié)議)ReplicatedComponentGroup(復(fù)制組件組)Flyweight(享元)106EncapsulatedImplementation(封裝實(shí)現(xiàn))背景實(shí)現(xiàn)組件接口問題組件通過接口提供服務(wù),但是接口只是承諾,組件必須實(shí)現(xiàn)此承諾.組件的實(shí)現(xiàn)受許多假設(shè),顧慮以及約束等接口不能反映的因素的影響作用力(force)組件實(shí)現(xiàn)受許多約束和需求影響,而組件使用者并不關(guān)心這些支持演化,并屏蔽對(duì)客戶的影響確保所有組件的實(shí)現(xiàn)細(xì)節(jié)隱藏在接口后面,從而使客戶與不同的實(shí)現(xiàn)或?qū)崿F(xiàn)的特定部署解耦107Method_Bmethod_Amethod_B_impmethod_A_impClientInterfaceImplementationPolymorphicdispatchComponentEncapsulatedImplementation(封裝實(shí)現(xiàn))108組件實(shí)現(xiàn)適配與擴(kuò)展EncapsulatedImplementationEncapsulatedImplementation(封裝實(shí)現(xiàn)):問題DomainObjectLayersBridge同步訪問組件表示分布式部署并發(fā)實(shí)現(xiàn)?????109Composite(組成)背景需要將部分-整體層級(jí)結(jié)構(gòu)中的聚合對(duì)象與原子對(duì)象一致對(duì)待問題有時(shí)部分-整體層級(jí)結(jié)構(gòu)由對(duì)象遞歸組合而成,這些對(duì)象支持相同的接口,但是客戶對(duì)結(jié)構(gòu)的具體布局和遞歸特性不感興趣,而是統(tǒng)一對(duì)待各層對(duì)象作用力(force)需要在部分-整體布局中保持遞歸層級(jí)結(jié)構(gòu)對(duì)象的重新布局不能影響客戶增加新對(duì)象對(duì)原來類型的影響要最小聲明一個(gè)組件接口,該接口的功能對(duì)部分-整體層級(jí)結(jié)構(gòu)中的所有對(duì)象都適用.子類化該接口,以實(shí)現(xiàn)特定的對(duì)象以及它們的遞歸組合110methodComposite(組成)methodmethodClientCompositeObjectComponentInterfaceLeafObjectImplementsInterfaceMaintainspartsthatimplementtheinterface111Composite(組成)

Leaf+Operation()Component+Add(component:Component):void+Remove(component:Component):boolean+GetChild(index:int):Component+Operation()

Composite+Add(component:Component):void+Remove(component:Component):boolean+GetChild(index:int):Component+Operation()children*

ClientOperation(){forallginchildreng.Operation()}112Composite(組成):問題CompositeEncapsulatedImplementation內(nèi)部結(jié)構(gòu)DecoratorInterpreter元素訪問組件表示?113Flyweight(享元)背景需要有效支持大量細(xì)粒度對(duì)象問題應(yīng)用程序使用了大量對(duì)象,造成很大的存儲(chǔ)開銷作用力(force)區(qū)分內(nèi)部和外部狀態(tài)應(yīng)用程序不倚賴于對(duì)象標(biāo)識(shí)應(yīng)用共享技術(shù)支持大量細(xì)粒度的對(duì)象.內(nèi)部狀態(tài)存儲(chǔ)于享元對(duì)象中,外部狀態(tài)則由客戶存儲(chǔ)或計(jì)算114Flyweight(享元)

ConcreteFlyweight+Operation(extrinsicState:)Flyweight+Operation(extrinsicState:)

FlyweightFactory+GetFlyweight(key:):FlyweightGetFlyweight(key){ifflyweights[key]exist{returnflyweights[key]}flyweights[key]=newFlyweightreturnflyweights[key]}

Client

UnsharedConcreteFlyweight+Operation(extrinsicState:)flyweights[key]1115Flyweight(享元):問題Flyweight細(xì)粒度共享組件共享對(duì)象創(chuàng)建EncapsulatedImplementationCompositeStrategyState?1164.典型面向服務(wù)的架構(gòu)SOA117服務(wù)包含4個(gè)主要方面:提供、使用、說明、中介。什么是服務(wù)IT系統(tǒng)所實(shí)現(xiàn)的服務(wù),必須與出納員向客戶提供的服務(wù)一致,并且必須對(duì)出納員提供支持。如果“IT系統(tǒng)提供服務(wù)的定義”與“業(yè)務(wù)功能與業(yè)務(wù)流程”一致,那么IT系統(tǒng)就更容易支持業(yè)務(wù)目標(biāo)。118典型的面向服務(wù)的架構(gòu)從IT的角度來看,服務(wù)就是機(jī)器可讀的消息(接收和返回)描述的網(wǎng)絡(luò)位置,也就是服務(wù)是由它所支持的消息交換模式定義的,消息中包含著數(shù)據(jù)具有的相應(yīng)模式(schema),模式用于在服務(wù)請(qǐng)求者和服務(wù)提供者之間建立契約(contract)。其它的一些原數(shù)據(jù)項(xiàng)分別描述了服務(wù)的網(wǎng)絡(luò)地址、所支持的操作、以及對(duì)可靠性、安全性以及事務(wù)性方面的要求。119SOA是一種軟件系統(tǒng)架構(gòu),不是一種語言,也不是一種具體的技術(shù),更不是一種產(chǎn)品,而是一種軟件系統(tǒng)架構(gòu)。它嘗試給出在特定環(huán)下推薦采用的一種架構(gòu),從這個(gè)角度上來說,它其實(shí)更像一種架構(gòu)模式(Pattern),是一種理念架構(gòu),是人們面向應(yīng)用服務(wù)的解決方案框架。服務(wù)(service)是整個(gè)SOA實(shí)現(xiàn)的核心。SOA架構(gòu)的基本元素是服務(wù),SOA指定一組實(shí)體(服務(wù)提供者、服務(wù)消費(fèi)者、服務(wù)注冊(cè)表、服務(wù)條款、服務(wù)代理和服務(wù)契約),這些實(shí)體詳細(xì)說明了如何提供服務(wù)和消費(fèi)服務(wù)。遵循

SOA

觀點(diǎn)的系統(tǒng)必須要有服務(wù),這些服務(wù)是可互操作的、獨(dú)立的、模塊化的、位置明確的、松耦合的,并且可以通過網(wǎng)絡(luò)查找其地址。SOA架構(gòu)120SOA應(yīng)用程序121

上面的圖從應(yīng)用程序角度展示了企業(yè)級(jí)SOA所包含的元素。業(yè)務(wù)流程由用戶界面應(yīng)用程序和服務(wù)應(yīng)用程序進(jìn)行部分和完全支持。業(yè)務(wù)流程中的一個(gè)步驟或者通過人工執(zhí)行,或者得到用戶界面應(yīng)用程序的支持。用戶界面應(yīng)用程序?qū)崿F(xiàn)了許多宏工作流,而且它們還使用實(shí)現(xiàn)業(yè)務(wù)功能的服務(wù)。在服務(wù)編排層,組合服務(wù)是通過編排語言(例如業(yè)務(wù)流程執(zhí)行語言(Business

ProcessExecution

Language,BPEL))定義的。組合服務(wù)的編排通過基本服務(wù)定義其流程和組成。編排層應(yīng)由支持圖形規(guī)范的編排工具提供支持,基本服務(wù)(由服務(wù)編排層使用,也由用戶界面應(yīng)用程序使用)通過服務(wù)應(yīng)用程序?qū)崿F(xiàn)。而服務(wù)實(shí)現(xiàn)又可以調(diào)用其他服務(wù),這些服務(wù)通常來自另外的服務(wù)應(yīng)用程序。SOA應(yīng)用程序122123可擴(kuò)展的標(biāo)記語言(XML)。

一種跨企業(yè)的、

公共的、中立的數(shù)據(jù)格式,提供了與編程語言、

開發(fā)環(huán)境以及軟件系統(tǒng)無關(guān)的標(biāo)數(shù)據(jù)類型與結(jié)構(gòu)和對(duì)

于業(yè)務(wù)文檔定義和業(yè)務(wù)信息交換的通用工具。Web服務(wù)(WebService)。一種基于XML技術(shù),用于傳遞消息、描述服務(wù)、發(fā)現(xiàn)服務(wù)以及其它的擴(kuò)充功能,它提供了各種被廣泛采用的、

用于分布式計(jì)算的接口描述,與下層執(zhí)行技術(shù)和應(yīng)用平臺(tái)的無關(guān)性、企業(yè)級(jí)的服務(wù)質(zhì)量(安全性、可靠性、事務(wù)性等)的可擴(kuò)展性、對(duì)合成應(yīng)用(業(yè)務(wù)流程、多渠道服務(wù)、快速集成等)的支持。面向服務(wù)的架構(gòu)(SOA)。

一套用于實(shí)現(xiàn)應(yīng)用間的互操作,以及重用IT資產(chǎn)的方法,具有以下特征:對(duì)架構(gòu)方面(治理、過程、建模、工具)的強(qiáng)烈關(guān)注、具有恰當(dāng)?shù)某橄髮哟?,有利于促進(jìn)業(yè)務(wù)需求與技術(shù)能力的配合與協(xié)調(diào),以及致力于創(chuàng)建可重用、粗粒度的業(yè)務(wù)功能、是一種適于快速、方便的構(gòu)建新應(yīng)用部署的基礎(chǔ)設(shè)施、

一個(gè)用于常見業(yè)務(wù)與IT功能的可重用復(fù)用庫。

業(yè)務(wù)流程管理(BusinessProcessManagement

-

BPM)。

用于自動(dòng)化業(yè)務(wù)操作的方法和技術(shù),包括:清晰地描述業(yè)務(wù)流程,以便于理解、改進(jìn)和優(yōu)化、易于針對(duì)業(yè)務(wù)需求的變更,快速修改業(yè)務(wù)流程、把原來由人工完成

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論