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

下載本文檔

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

文檔簡(jiǎn)介

1、軟件架構(gòu)與設(shè)計(jì)模式曾令秋 博士、副教授2014年4月l 1. 軟件架構(gòu)n 軟件架構(gòu)定義n 架構(gòu)設(shè)計(jì)方法與過(guò)程n 軟件架構(gòu)的設(shè)計(jì)要點(diǎn)l 2. 模式簡(jiǎn)介n 模式的定義n 模式的分類(lèi)l 3. 常用模式n 從混沌到結(jié)構(gòu)n 分布式基礎(chǔ)設(shè)施n 事件多路分離和分派n 接口分割n 組件分割l 4. 典型面向服務(wù)的架構(gòu)SOA2目錄目錄1. 軟件架構(gòu)1.1 架構(gòu)定義l軟件體系結(jié)構(gòu)通常被稱(chēng)為架構(gòu),指可以預(yù)制和可重構(gòu)的軟件框架結(jié)構(gòu),Garlan & Shaw模型的基本思想是:軟件體系結(jié)構(gòu)=構(gòu)件(component)、連接件(connector)和約束(constrain):n 構(gòu)件可以是一組代碼,如程序的模塊

2、;也可以是一個(gè)獨(dú)立的程序;n 連接件可以是過(guò)程調(diào)用、管道、遠(yuǎn)程過(guò)程調(diào)用(RPC)等,用于表示構(gòu)件之間的相互作用;n 約束一般為對(duì)象連接時(shí)的規(guī)則,或指明構(gòu)件連接的形式和條件,例如,上層構(gòu)件可要求下層構(gòu)件的服務(wù),反之不行;兩對(duì)象不得遞規(guī)地發(fā)送消息;代碼復(fù)制遷移的一致性約束;什么條件下此種連接無(wú)效等。4架構(gòu)定義l 軟件架構(gòu)不僅僅注重軟件本身的結(jié)構(gòu)和行為, 還注重其他特性:使用, 功能性, 性能, 彈性, 重用, 可理解性, 經(jīng)濟(jì)和技術(shù)的限制及權(quán)衡。5例: ACE的分層架構(gòu)6架構(gòu)的范圍l 軟件架構(gòu)本門(mén)課程的主關(guān)注點(diǎn)。l 硬件架構(gòu)包括CPU, 內(nèi)存,硬盤(pán),周邊設(shè)備例如打印機(jī),與連接這些元素的部分。l 組

3、織架構(gòu)是一些關(guān)于商業(yè)進(jìn)程,組織結(jié)構(gòu),規(guī)則和職責(zé),與組織核心能力的部分。l 信息架構(gòu)包含組織好的信息結(jié)構(gòu)。l 軟件架構(gòu)、硬件架構(gòu)、組織架構(gòu)和信息架構(gòu)是全部系統(tǒng)架構(gòu)的子結(jié)構(gòu)。l 企業(yè)架構(gòu)與系統(tǒng)架構(gòu)很相似,包括硬件,軟件,人員等。7l 企業(yè)架構(gòu)師EA (Enterprise Architect) 的職責(zé)是決定整個(gè)公司的技術(shù)路線和技術(shù)發(fā)展方向。蓋茨給自己的Title是首席軟件架構(gòu)師,實(shí)際上就是EA角色;l 基礎(chǔ)結(jié)構(gòu)架構(gòu)師IA (Infrastructure Architect) 的工作是提煉和優(yōu)化技術(shù)方面積累和沉淀形成的基礎(chǔ)性的、公共的、可復(fù)用的框架和組件,這些是技術(shù)型公司傳承下來(lái)的最寶貴的財(cái)富;l

4、特定技術(shù)架構(gòu)師TSA (Technology-Specific Architect)主要從事類(lèi)似安全架構(gòu)、存儲(chǔ)架構(gòu)等專(zhuān)項(xiàng)技術(shù)的規(guī)劃和設(shè)計(jì)工作;l 解決方案架構(gòu)師SA (Solution Architect)的工作則專(zhuān)于解決方案的規(guī)劃和設(shè)計(jì),所謂解決方案,就是把產(chǎn)品、技術(shù)或理論,不斷地進(jìn)行組合,來(lái)創(chuàng)造出滿足用戶(hù)需求的選擇。 軟件架構(gòu)師基本上是EA+TSA+IA,是程序員向上發(fā)展的道路,系統(tǒng)架構(gòu)師實(shí)際上是SA+TSA,更著力于綜合運(yùn)用已有的產(chǎn)品和技術(shù),來(lái)實(shí)現(xiàn)客戶(hù)期望的需求。架構(gòu)師分類(lèi)架構(gòu)師分類(lèi)81.2 架構(gòu)設(shè)計(jì)基本過(guò)程概念化階段概念化階段分析階段分析階段架構(gòu)設(shè)計(jì)階段架構(gòu)設(shè)計(jì)階段并行開(kāi)發(fā)和測(cè)試階段并

5、行開(kāi)發(fā)和測(cè)試階段驗(yàn)收與交互階段驗(yàn)收與交互階段愿景需求架構(gòu)可執(zhí)行系統(tǒng)交付的系統(tǒng)9架構(gòu)設(shè)計(jì)基本過(guò)程分析階段需求分析領(lǐng)域建模確定關(guān)鍵需求概念性架構(gòu)設(shè)計(jì)細(xì)化架構(gòu)驗(yàn)證架構(gòu)架構(gòu)設(shè)計(jì)階段10軟件需求l 需求n 系統(tǒng)必須滿足的情況或提供的能力. 可以直接來(lái)自客戶(hù)需要, 也可以來(lái)自合同,標(biāo)準(zhǔn),規(guī)范或其他有正規(guī)約束力的文檔軟件需求軟件需求功能需求功能需求非功能需求非功能需求質(zhì)量屬性質(zhì)量屬性約束約束運(yùn)行期質(zhì)量屬性運(yùn)行期質(zhì)量屬性開(kāi)發(fā)期質(zhì)量屬性開(kāi)發(fā)期質(zhì)量屬性11軟件系統(tǒng)架構(gòu)要素l 它是一個(gè)軟件系統(tǒng)從整體到部分的最高層次的劃分。一個(gè)系統(tǒng)通常是由組件組成的,而這些組件如何形成、相互之間如何發(fā)生作用,則是關(guān)于這個(gè)系統(tǒng)本身結(jié)構(gòu)

6、的重要信息。系統(tǒng)包括架構(gòu)組件、連接器、任務(wù)流。架構(gòu)組件是組成系統(tǒng)的核心“磚瓦”,而連接器則描述這些 組件之間通訊的路徑、通訊的機(jī)制、通訊的預(yù)期結(jié)果,任務(wù)流則描述系統(tǒng)如何使用這些組件和連接器完成某一項(xiàng)需求。l 它是建造一個(gè)系統(tǒng)所作出的最高層次的、以后難以更改的,商業(yè)的和技術(shù)的決定。這樣的決定必定是有關(guān)系統(tǒng)設(shè)計(jì)成敗的最重要決定,必須經(jīng)過(guò)非常慎重的研究和考察。在決定時(shí),要考慮獨(dú)特的架構(gòu)風(fēng)格和恰當(dāng)?shù)募軜?gòu)模式。1.3 軟件架構(gòu)的設(shè)計(jì)要素軟件架構(gòu)的設(shè)計(jì)要素12軟件軟件架構(gòu)的目標(biāo)架構(gòu)的目標(biāo)l 可靠性(Reliable)。軟件系統(tǒng)對(duì)于用戶(hù)的商業(yè)經(jīng)營(yíng)和管理來(lái)說(shuō)極為重要,因此軟件系統(tǒng)必須非??煽?。l 安全性(Se

7、cure)。軟件系統(tǒng)所承擔(dān)的交易的商業(yè)價(jià)值極高,系統(tǒng)的安全性非 常重要。l 可擴(kuò)展性(Scalable)。軟件必須能夠在用戶(hù)的使用率、用戶(hù)的數(shù)目增加很快的情況下,保持合理的性能,才能適應(yīng)用戶(hù)的市場(chǎng)擴(kuò)展得可能性。 l 可定制化(Customizable)。同樣的一套軟件,可以根據(jù)客戶(hù)群的不同和市場(chǎng)需求的變化進(jìn)行調(diào)整。13軟件架構(gòu)的目標(biāo)l 可延伸性(Extensible)。在新技術(shù)出現(xiàn)的時(shí)候,一個(gè)軟件系統(tǒng)應(yīng)當(dāng)允許導(dǎo)入新技術(shù),從而對(duì)現(xiàn)有系統(tǒng)進(jìn)行功能和性能的擴(kuò)展;l 可維護(hù)性(Maintainable)。軟件系統(tǒng)的維護(hù)包括兩方面:1。排除現(xiàn)有的錯(cuò) 誤,2。將新的軟件需求反映到現(xiàn)有系統(tǒng)中去。一個(gè)易于維護(hù)

8、的系統(tǒng)可以有效 地降低技術(shù)支持的花費(fèi)l 客戶(hù)體驗(yàn)(Customer Experience)。軟件系統(tǒng)必須易于使用。l 市場(chǎng)時(shí)機(jī)(Time to Market)。軟件用戶(hù)要面臨同業(yè)競(jìng)爭(zhēng),軟件提供商也要面 臨同業(yè)競(jìng)爭(zhēng)。以最快的速度爭(zhēng)奪市場(chǎng)先機(jī)非常重要。14軟件軟件架構(gòu)的種類(lèi)架構(gòu)的種類(lèi)軟件系統(tǒng)的邏輯架構(gòu)圖邏輯架構(gòu):軟件系統(tǒng)中元件之間的關(guān)系,比如用戶(hù)界面,數(shù)據(jù)庫(kù),外部系統(tǒng)接口,商業(yè)邏輯元件,等等15軟件軟件架構(gòu)的種類(lèi)架構(gòu)的種類(lèi)物理架構(gòu):軟件元件是怎樣放到硬件上的軟件系統(tǒng)的物理架構(gòu)圖16軟件軟件架構(gòu)的種類(lèi)架構(gòu)的種類(lèi)l 系統(tǒng)架構(gòu)系統(tǒng)架構(gòu):系統(tǒng)的非功能性特征,如可擴(kuò)展性、可靠性、強(qiáng)壯性、靈活性、 性能等。系

9、統(tǒng)架構(gòu)的設(shè)計(jì)要求架構(gòu)師具備軟件和硬件的功能和性能的過(guò)硬知識(shí),是架 構(gòu)設(shè)計(jì)工作中最為困難的工作。架構(gòu)的兩要素:元件劃分和設(shè)計(jì)決定。 l 元件劃分元件劃分 一個(gè)軟件系統(tǒng)中的元件首先是邏輯元件。這些邏輯元件如何放到硬件上,以 及這些元件如何為整個(gè)系統(tǒng)的可擴(kuò)展性、可靠性、強(qiáng)壯性、靈活性、性能等 做出貢獻(xiàn),是非常重要的信息。l 設(shè)計(jì)決定設(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):l模型的結(jié)構(gòu),即組織模式,例如分層。 l基本元素,

10、即關(guān)鍵用例、主類(lèi)、常用機(jī)制等,它們與模型中的各元素相對(duì)。l幾個(gè)關(guān)鍵場(chǎng)景,它們表示了整個(gè)系統(tǒng)的主要控制流程。 l記錄模塊度、可選特征、產(chǎn)品線狀況的服務(wù)。 l構(gòu)架視圖在本質(zhì)上是整體設(shè)計(jì)的抽象或簡(jiǎn)化,它們通過(guò)舍棄具體細(xì)節(jié)來(lái)突出重要的特征。在考慮以下方面時(shí),這些特征非常重要: n系統(tǒng)演進(jìn),即進(jìn)入下一個(gè)開(kāi)發(fā)周期。 n在產(chǎn)品線環(huán)境下復(fù)用構(gòu)架或構(gòu)架的一部分。 n評(píng)估補(bǔ)充質(zhì)量,例如性能、可用性、可移植性和安全性。 n向團(tuán)隊(duì)或分包商分配開(kāi)發(fā)工作。 n決定是否包括市售構(gòu)件。 n插入范圍更廣的系統(tǒng)。 構(gòu)架重點(diǎn)構(gòu)架重點(diǎn) 182. 模式 Pattern19模式簡(jiǎn)介l要素n背景 contextn問(wèn)題 problemn作用

11、力 (約束) forcen解決方案 solution202.1 模式定義lPOSA1的定義:nA pattern for software architecture describes a particular recurring design problem that arise in specific design contexts, and presents a well-proven generic scheme for its solution. The solution scheme is specified by its constituent components, their

12、 relationships, and the ways in which they collaborate.21模式的特性l 最佳實(shí)踐的記錄n 更高一級(jí)的抽象n 設(shè)計(jì)的公共詞匯表n 記錄軟件架構(gòu)的工具n 支持具有良好屬性的軟件構(gòu)建n 與項(xiàng)目細(xì)節(jié), 實(shí)現(xiàn)方法, 編程語(yǔ)言無(wú)關(guān)22例子:簡(jiǎn)單的模式Explicit Interface (顯式接口)l 背景n 軟件架構(gòu)工作的主要關(guān)注點(diǎn)之一: 有效恰當(dāng)?shù)乇硎鼋M件接口 問(wèn)題一個(gè)組件代表一個(gè)自含的功能單位及其發(fā)布的使用契約. 客戶(hù)可以使用它來(lái)建立自己的功能, 但是直接訪問(wèn)組件的完全實(shí)現(xiàn), 則會(huì)導(dǎo)致客戶(hù)依賴(lài)組件的內(nèi)部表示, 最終增加了應(yīng)用程序內(nèi)部的耦合度 作

13、用力(force)客戶(hù)只能依賴(lài)組件發(fā)布的接口, 對(duì)實(shí)現(xiàn)的修改不能影響客戶(hù)客戶(hù)不倚賴(lài)組件的地理位置組件提供的方法對(duì)客戶(hù)有意義, 能有效正確使用將組件接口的聲明與實(shí)現(xiàn)分離, 只對(duì)客戶(hù)曝露組件接口, 同時(shí)隱藏實(shí)現(xiàn)和位置23Method _Bmethod _AExplicit Interface (顯式接口)method _B _impmethod _A_ imp客戶(hù)客戶(hù)接口接口實(shí)現(xiàn)實(shí)現(xiàn)多態(tài)分派組件組件24誤解與陷阱l 企圖將所有軟件開(kāi)發(fā)活動(dòng)和工件變成模式n 企圖將每個(gè)新穎的和復(fù)雜的設(shè)計(jì)貼上模式的標(biāo)簽n 將模式看成一些固定不變的事物: 如特定的類(lèi)配置n 將模式看作編碼指南n 有限或誤解的模式詞匯導(dǎo)致對(duì)

14、給定問(wèn)題使用了錯(cuò)誤的模式n 企望機(jī)械應(yīng)用模式就可以得到精致的架構(gòu)25誤解與陷阱n 企圖在需要新思想的軟件開(kāi)發(fā)中使用現(xiàn)成模式n 對(duì)模式如何起作用以及怎樣起作用企望過(guò)高n 企圖完全基于自動(dòng)化工具使用模式n 將模式當(dāng)作組件的簡(jiǎn)單集合n 認(rèn)為基于模式的設(shè)計(jì)排斥或替代重構(gòu)262.2 模式分類(lèi)l 按粒度分類(lèi)n 架構(gòu), 設(shè)計(jì), 慣用法l 按效果好壞分類(lèi)n 模式, 反模式l 按問(wèn)題域(使用目的)分類(lèi) (以分布式計(jì)算為例)n 從混沌到結(jié)構(gòu)n 分布式基礎(chǔ)設(shè)施n 事件多路分離和分派n 接口分割n 組件分割27n 應(yīng)用程序控制n 并發(fā)n 同步n 對(duì)象交互n 適配與擴(kuò)展n 模態(tài)(modal)行為n 資源管理 (對(duì)象生命

15、周期管理)n 數(shù)據(jù)庫(kù)訪問(wèn)3. 常用模式28常用模式l 從混沌到結(jié)構(gòu)l 分布式基礎(chǔ)設(shè)施l 事件多路分離和分派l 接口分割l 組件分割l 應(yīng)用程序控制l 并發(fā)l 同步l 對(duì)象交互l 適配與擴(kuò)展l 模態(tài)(modal)行為l 資源管理l 數(shù)據(jù)庫(kù)訪問(wèn)293.1 從混沌到結(jié)構(gòu)303.1 從混沌到結(jié)構(gòu)l從混沌到結(jié)構(gòu)n將需求和約束轉(zhuǎn)換為粗粒度的軟件結(jié)構(gòu) 各部分定義清晰,可操作 抽象與劃分, 忽略細(xì)節(jié)n關(guān)注 性能, 持續(xù)可用性 可擴(kuò)展性, 可維護(hù)性 支持變化313.1 從混沌到結(jié)構(gòu)l 領(lǐng)域建模n滿足應(yīng)用領(lǐng)域的功能性需求, 同時(shí)適應(yīng)變化 功能屬性 業(yè)務(wù)流程 業(yè)務(wù)算法選擇Domain Model32Domain M

16、odel (領(lǐng)域模型)l 背景n 為應(yīng)用建立初始結(jié)構(gòu)l 問(wèn)題需求和約束只是隱含了功能, 但還不能為應(yīng)用提供直接具體的開(kāi)發(fā)結(jié)構(gòu)對(duì)系統(tǒng)范圍和應(yīng)用領(lǐng)域缺乏精確和合理的洞見(jiàn), 會(huì)使實(shí)現(xiàn)成為一團(tuán)爛泥,難于理解, 難于開(kāi)發(fā), 不易交付l 作用力(force)需求列表只是應(yīng)用的問(wèn)題域, 而不是解域, 需要映射為軟件實(shí)體建立一個(gè)模型建立一個(gè)模型, 定義系統(tǒng)的業(yè)務(wù)職責(zé)范圍以及可能的變化定義系統(tǒng)的業(yè)務(wù)職責(zé)范圍以及可能的變化:模型元素是對(duì)應(yīng)用領(lǐng)域的概念抽象模型元素是對(duì)應(yīng)用領(lǐng)域的概念抽象, 它們的角色和交互反它們的角色和交互反映了應(yīng)用領(lǐng)域的工作流映了應(yīng)用領(lǐng)域的工作流33從混沌到結(jié)構(gòu)l 分解領(lǐng)域模型n 應(yīng)用與環(huán)境怎樣交

17、互?n 應(yīng)用怎樣處理數(shù)據(jù)?n 應(yīng)用支持什么變化?n 應(yīng)用的預(yù)期生命周期如何?34Domain Model (領(lǐng)域模型)內(nèi)部劃分?jǐn)?shù)據(jù)流處理數(shù)據(jù)驅(qū)動(dòng)處理系統(tǒng)演進(jìn)用戶(hù)界面變化功能變化遠(yuǎn)程通信Domain ModelDomain ObjectPipes and FiltersShared RepositoryBlackboardLayersDatabaseAccess LayerModel-View-ControllerPresentationAbstraction-ControlMicrokernelReflectionBrokerMessagingPublisher-Subscriber35Lay

18、ers (分層)l 背景n 必須支持系統(tǒng)的不同部分獨(dú)立開(kāi)發(fā)和演進(jìn)l 問(wèn)題l 由于受系統(tǒng)大小, 上市時(shí)間等需求約束, 需要考慮系統(tǒng)不同部分的獨(dú)立開(kāi)發(fā)和演進(jìn)l 如果系統(tǒng)架構(gòu)不能清晰合理分離關(guān)注點(diǎn), 則各部分的交互得不到很好的支持, 也不能獨(dú)立開(kāi)發(fā)l 作用力(force)l 如何尋求平衡,能夠l 合理劃分系統(tǒng), 使各部分可以獨(dú)立開(kāi)發(fā)和部署l 不陷于細(xì)節(jié)的泥淖對(duì)開(kāi)發(fā)中的系統(tǒng)定義一個(gè)或多個(gè)層級(jí)對(duì)開(kāi)發(fā)中的系統(tǒng)定義一個(gè)或多個(gè)層級(jí), 每一層都具有清晰每一層都具有清晰特定的職責(zé)特定的職責(zé)36Layers (分層)Function 1Function 1Function 1Function AFunction B

19、Function CFunction XFunction YFunction Z接口接口實(shí)現(xiàn)實(shí)現(xiàn)Layer 3Layer 2Layer 1典型應(yīng)用典型應(yīng)用: TCP/IP等通信協(xié)議等通信協(xié)議37Layers (分層)l可沿不同維度指定分層的準(zhǔn)則n 抽象, 粒度, 硬件距離, 變化速度l層數(shù)適當(dāng)l注意層中每個(gè)內(nèi)聚的職責(zé)l層內(nèi)如何隔離變化l控制和數(shù)據(jù)流可以在層間雙向流動(dòng)l層間依賴(lài)關(guān)系是單向向下的: 下層不能依賴(lài)上層的功能38Layers :問(wèn)題 層內(nèi)分解接口和實(shí)現(xiàn)分離 連接借口和實(shí)現(xiàn)自底向上層間通信Layers什么模式可以提供解決方案什么模式可以提供解決方案?39Model-View-Contro

20、ller (MVC)l 背景n 要考慮應(yīng)用的用戶(hù)界面比領(lǐng)域功能變化快l 問(wèn)題l 用戶(hù)界面比應(yīng)用的核心功能變化快, 但界面的變化不能對(duì)核心功能造成不良影響l 作用力l 用戶(hù)界面的改變應(yīng)該容易, 并局限于系統(tǒng)界面部分l 界面顯示的內(nèi)容要與內(nèi)部狀態(tài)一致,能立即響應(yīng)內(nèi)部狀態(tài)的變化l 對(duì)支持多種skin外觀的系統(tǒng),每種skin的變化快慢不一樣將交互式系統(tǒng)劃分為解耦的三部分:處理,輸入和輸將交互式系統(tǒng)劃分為解耦的三部分:處理,輸入和輸出通過(guò)某種變化傳播機(jī)制保證三部分狀態(tài)的一致出通過(guò)某種變化傳播機(jī)制保證三部分狀態(tài)的一致40Model-View-Controller (MVC)displayupdatedo

21、somethingupdateget datafunction 2function1data 1data 2data 3notifyUser InterfaceModelViewController1. invoke2. modify3. start change notification4. notify5. updatestateApplicationFunctionality41Presentation-Abstraction-Control (PAC)l 背景n 有時(shí)要考慮應(yīng)用的不同功能職責(zé)需要不同范式的用戶(hù)界面l 問(wèn)題n 通過(guò)一種界面如表單,菜單,對(duì)話框等, 應(yīng)用程序就可以提供人機(jī)交

22、互, 但是有時(shí)候某些應(yīng)用程序需要對(duì)不同的功能提供不同范式的界面, 以達(dá)到最佳的操作性l 作用力(force)n 比如在機(jī)器人控制系統(tǒng)中, 定義某項(xiàng)任務(wù)和控制機(jī)器人完成該任務(wù)需要不同的用戶(hù)界面, 但是必須保證所有的功能及其對(duì)應(yīng)的用戶(hù)界面內(nèi)聚一致n 某一界面的改變不能影響其對(duì)應(yīng)的功能和其他功能-界面n 某一功能實(shí)現(xiàn)的改變也不能影響其對(duì)應(yīng)的界面和其他的功能-界面 將交互式應(yīng)用劃分為解耦的代理將交互式應(yīng)用劃分為解耦的代理agents層級(jí)結(jié)構(gòu)層級(jí)結(jié)構(gòu): 一個(gè)頂層根代理一個(gè)頂層根代理, 幾個(gè)中間級(jí)代理幾個(gè)中間級(jí)代理,以及許多底層代理以及許多底層代理. 每個(gè)代理完成應(yīng)用的某項(xiàng)功能每個(gè)代理完成應(yīng)用的某項(xiàng)功能,

23、 并提供對(duì)應(yīng)的用戶(hù)界面并提供對(duì)應(yīng)的用戶(hù)界面42Presentation-Abstraction-Control (PAC)do somethingdisplaymediatefunction_2function_1PresentationControlAbstractiondo somethingdisplaymediatefunction_2function_1do somethingdisplaymediatefunction_2function_1do somethingdisplaymediatefunction_2function_1do somethingdisplaymediat

24、efunction_2function_1協(xié)調(diào)協(xié)調(diào)協(xié)調(diào)協(xié)調(diào)協(xié)調(diào)協(xié)調(diào)協(xié)調(diào)協(xié)調(diào)頂層頂層 PAC Agent中間層中間層 PAC Agent底層底層PAC Agent43MVC and PAC: 問(wèn)題用戶(hù)界面分離視圖種類(lèi)控制器種類(lèi)請(qǐng)求處理用戶(hù)界面分離變化傳播模型劃分?jǐn)?shù)據(jù)交換OS/庫(kù)獨(dú)立變化傳播代理劃分?jǐn)?shù)據(jù)交換請(qǐng)求路由控制設(shè)計(jì)子系統(tǒng)設(shè)計(jì)Model-ViewControllerPresentationAbstractionControlDomain Model什么模式可以提供解決方案什么模式可以提供解決方案?44Microkernel (微內(nèi)核)l 背景n 設(shè)計(jì)支持不同部署環(huán)境下功能的可伸縮性和的適應(yīng)性

25、l 問(wèn)題n 某些系統(tǒng)有多個(gè)版本, 每個(gè)版本或者提供不同的功能集, 或者在某一方面與前一版本不同. 但是所有的版本應(yīng)該基于共同的架構(gòu)和核心功能l 作用力(force)n 避免架構(gòu)在不同版本間產(chǎn)生漂移, 使共享功能的開(kāi)發(fā)和維護(hù)代價(jià)降到最小n 應(yīng)用的版本升級(jí)不需要修改系統(tǒng), 或使修改降到最小n 方便地提供針對(duì)不同界面, 不同平臺(tái)的版本, 以滿足客戶(hù)的環(huán)境提供一個(gè)公用的最小的核心架構(gòu)提供一個(gè)公用的最小的核心架構(gòu). 應(yīng)用的不同版本通過(guò)一應(yīng)用的不同版本通過(guò)一種即插即用的基礎(chǔ)設(shè)施種即插即用的基礎(chǔ)設(shè)施, 在此架構(gòu)上進(jìn)行擴(kuò)展在此架構(gòu)上進(jìn)行擴(kuò)展. 45Microkernel (微內(nèi)核)route requestr

26、egister_ svrunregister_ svrfunction_1function_2function_3displaydo somethingfunction_2function_1function_3External Server (GUI)External Server (API)MicrokernelInternal ServerSystemUser46Microkernel: 問(wèn)題標(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什么模式可以提供解決方案什么模式可以提供解決方案?47Re

27、flection (反射)l 背景n 提供一種設(shè)計(jì), 為預(yù)期之外變化的演進(jìn)和集成做準(zhǔn)備 問(wèn)題對(duì)長(zhǎng)生命周期應(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)等的易變方面抽象為應(yīng)用的結(jié)構(gòu)、行為以及狀態(tài)等的易變方面抽象為一組元對(duì)象一組元對(duì)象. 使用兩層架構(gòu)分離元對(duì)象和核心應(yīng)用邏輯使用兩層架構(gòu)分離元對(duì)象和核心應(yīng)用邏輯: 元層次包含元對(duì)象元層次包含元對(duì)象, 基本層包含應(yīng)用邏輯基本層包含應(yīng)用邏輯. 48Re

28、flection (反射)Userconfigureaspect configurepropertyproperty_1Metalobject ProtocolMaintaineraspect_2Metalobjectsdo something function_1User Interfacefunction_1CoreApplicationLogicusesusesMetalLevelBaseLevel49Reflection: 問(wèn)題監(jiān)管控制與應(yīng)用功能分離基本層以及元層的劃分元層訪問(wèn)元對(duì)象生命周期管理ReflectionDomain Model什么模式可以提供解決方案什么模式可以提供解決方案

29、?50Pipes and Filters (管道-過(guò)濾器)l 背景n 提供一種設(shè)計(jì), 使應(yīng)用適合處理數(shù)據(jù)流 問(wèn)題某些應(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í)候需要顯式訪問(wèn)中間數(shù)據(jù)結(jié)果數(shù)據(jù)流模型應(yīng)該支持增量式讀寫(xiě)和處理持續(xù)時(shí)間長(zhǎng)的處理不應(yīng)成為性能瓶頸將應(yīng)用任務(wù)劃分為幾個(gè)自含的數(shù)據(jù)處理步驟將應(yīng)用任務(wù)劃分為幾個(gè)自含的數(shù)據(jù)處理步驟,這些步驟通這些步驟通過(guò)其間的數(shù)據(jù)緩沖區(qū)連接成一個(gè)數(shù)據(jù)處理管道過(guò)其間的數(shù)據(jù)緩沖區(qū)連接成一個(gè)數(shù)據(jù)處理管道.51inputPipes and Fi

30、lters (管道-過(guò)濾器)bufferinputbufferinputInput DeviceOutput DeviceFilter 1Pipe 1Filter 2Filter 2Pipe N-1Filter N52Pipes and Filters :問(wèn)題層間通過(guò)數(shù)據(jù)流交互管道以及過(guò)濾器的劃分遠(yuǎn)程通信數(shù)據(jù)交換Pipes and FiltersDomain Model什么模式可以提供解決方案什么模式可以提供解決方案?53Shared Repository (共享倉(cāng)庫(kù))l 背景n 提供一種設(shè)計(jì), 使應(yīng)用的各部分操作一組共享數(shù)據(jù), 并通過(guò)共享數(shù)據(jù)進(jìn)行協(xié)調(diào) 問(wèn)題某些應(yīng)用本質(zhì)上使數(shù)據(jù)驅(qū)動(dòng)的: 組件之

31、間的交互不是通過(guò)特定的業(yè)務(wù)流程, 而是依賴(lài)其所處理的數(shù)據(jù). 即便如此, 仍然需要一種機(jī)制來(lái)控制這種交互. 作用力(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)系起來(lái)會(huì)導(dǎo)致硬編碼的業(yè)務(wù)流程為所有數(shù)據(jù)維持一個(gè)中心倉(cāng)庫(kù)為所有數(shù)據(jù)維持一個(gè)中心倉(cāng)庫(kù), 以供各功能組件共享以供各功能組件共享. 數(shù)數(shù)據(jù)的可用性據(jù)的可用性,質(zhì)量以及狀態(tài)等觸發(fā)和協(xié)調(diào)應(yīng)用的控制流質(zhì)量以及狀態(tài)等觸發(fā)和協(xié)調(diào)應(yīng)用的控制流.54Shared Repository (共享倉(cāng)庫(kù))Application Componentsfun

32、ction_1function_2function_3function_4Shared RepositoryOperates on55Blackboard (黑板)l 背景n 提供一種設(shè)計(jì), 使應(yīng)用在沒(méi)有確定性解決方案的時(shí)候可以完成任務(wù) 問(wèn)題某些任務(wù)沒(méi)有確定性算法, 但是試誤技術(shù)足夠勝任, 因此需要開(kāi)發(fā)針對(duì)這種任務(wù)的軟件產(chǎn)品. 作用力(force)輸入的數(shù)據(jù)模糊不精確需要探索各種方案路徑, 每個(gè)中間步驟都可能產(chǎn)生可選結(jié)果, 通常不知道最佳解在合理的時(shí)間內(nèi), 計(jì)算出有價(jià)值的解決方案運(yùn)用啟發(fā)式計(jì)算運(yùn)用啟發(fā)式計(jì)算, 通過(guò)多個(gè)具有確定性算法的組件通過(guò)多個(gè)具有確定性算法的組件, 對(duì)假對(duì)假定的中間解決方案

33、逐步改進(jìn)定的中間解決方案逐步改進(jìn).56Blackboard (黑板)checkactivatecheckactivatecheckactivateIntermediate SolutionHypothesis 1-Intermediate SolutionHypothesis 2-Intermediate SolutionHypothesis 3Knowledge SourcesBlackboardrunControl.1.確定最佳的知識(shí)源, 以修改黑板中的數(shù)據(jù)2. 激活選中的知識(shí)源, 使之修改黑板中的數(shù)據(jù)57Blackboard , Shared Repository : 問(wèn)題

34、分離數(shù)據(jù)與功能分離數(shù)據(jù)與功能傳播變化線程安全數(shù)據(jù)訪問(wèn)功能劃分?jǐn)?shù)據(jù)訪問(wèn)數(shù)據(jù)交換數(shù)據(jù)交換數(shù)據(jù)訪問(wèn)功能劃分Shared RepositoryBlackboardDomain Model什么模式可以提供解決方案什么模式可以提供解決方案?58Domain Object (領(lǐng)域?qū)ο?l 背景n 所有設(shè)計(jì)的關(guān)鍵: 分離應(yīng)用職責(zé), 每個(gè)職責(zé)應(yīng)自我包含, 內(nèi)聚 問(wèn)題組成軟件的各部分具有復(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)成塊

35、將每個(gè)不同的功能封裝進(jìn)一個(gè)自我包含的構(gòu)成塊Domain Object (領(lǐng)域?qū)ο箢I(lǐng)域?qū)ο?中中59Domain Object (領(lǐng)域?qū)ο?Function AFunction BFunction CFunction ZDomain Object 1Function XFunction YDomain Object 2Domain Object 3Domain Object 4Domain Object InterfaceDomain Object Implementation60Domain Object (領(lǐng)域?qū)ο?分離接口和實(shí)現(xiàn)內(nèi)部劃分內(nèi)部劃分通用領(lǐng)域?qū)ο筮B接接口和實(shí)現(xiàn)生命周期控制領(lǐng)域?qū)ο?/p>

36、配置Domain ObjectDomain ModelLayersModel-View-ControllerPresentationAbstractionControlMicrokernelReflectionPipes and FiltersShared RepositoryBlackboard什么模式可以提供解決方案什么模式可以提供解決方案?613.2 分布式基礎(chǔ)設(shè)施62分布式基礎(chǔ)設(shè)施l 分布式基礎(chǔ)設(shè)施軟件是一種中間件 (middleware)n 應(yīng)用程序之下, 操作系統(tǒng)和網(wǎng)絡(luò)之上n 屏蔽來(lái)自不同操作系統(tǒng)和網(wǎng)絡(luò)的固有復(fù)雜性和偶發(fā)復(fù)雜性 固有復(fù)雜性: 選擇合適的通信機(jī)制, 并設(shè)計(jì)良好的協(xié)議來(lái)

37、有效使用這些機(jī)制 設(shè)計(jì)合理的網(wǎng)絡(luò)服務(wù), 以有效利用現(xiàn)有計(jì)算資源, 并降低將來(lái)的維護(hù)成本 有效使用并發(fā)機(jī)制, 使系統(tǒng)獲得可預(yù)計(jì)的, 可靠的高性能 管理和配置服務(wù), 以獲得最大程度的系統(tǒng)可用性和靈活性63偶發(fā)復(fù)雜性:缺乏類(lèi)型安全, 可移植, 可擴(kuò)充的原始OS API算法分解的廣泛使用, 無(wú)謂造成網(wǎng)絡(luò)應(yīng)用程序在維護(hù)和擴(kuò)充上的困難網(wǎng)絡(luò)應(yīng)用中, 核心概念和功能的不斷發(fā)現(xiàn)和創(chuàng)造, 造成軟件生命周期的成本無(wú)謂地居高不下l 有各種中間件可供選擇n CORBA, .Net Remoting, the Microsoft Communication Framework, JMSl 了解這些中間件使用的設(shè)計(jì)模式,

38、有助于選擇正確的中間件l 這些中間件使用了三種基本的通信方式: messaging, publish/subscribe, remote method invocation , 基本上對(duì)應(yīng)三種模式分布式基礎(chǔ)設(shè)施64分布式基礎(chǔ)設(shè)施模式模式通信方式通信方式通信關(guān)系通信關(guān)系組件依賴(lài)性組件依賴(lài)性Broker (代理者)遠(yuǎn)程方法調(diào)用一對(duì)一組件接口Messaging (消息傳遞)消息多對(duì)一通訊終點(diǎn), 消息格式Publisher-Subscriber (發(fā)布者-訂閱者)事件一對(duì)多事件格式65Messaging (消息傳遞)l 背景n 需要一個(gè)通信的基礎(chǔ)設(shè)施, 將獨(dú)立開(kāi)發(fā)的服務(wù)組成一個(gè)統(tǒng)一的系統(tǒng) 問(wèn)題某些分布

39、式系統(tǒng)是由獨(dú)立開(kāi)發(fā)的服務(wù)組成, 這些服務(wù)必須可靠地交互, 但又不能導(dǎo)致過(guò)緊的依賴(lài)關(guān)系 作用力(force)集成現(xiàn)有的、獨(dú)立的特定服務(wù)以構(gòu)成企業(yè)級(jí)解決方案被集成的服務(wù)需要可靠地協(xié)調(diào)工作, 但這些服務(wù)是獨(dú)立開(kāi)發(fā)的, 并不知道彼此的功能接口每個(gè)服務(wù)可能要被多個(gè)集成環(huán)境使用, 服務(wù)對(duì)不同的集成環(huán)境不能具有排他性 將服務(wù)通過(guò)一個(gè)消息總線連接起來(lái)將服務(wù)通過(guò)一個(gè)消息總線連接起來(lái), 并通過(guò)它異步傳輸數(shù)據(jù)并通過(guò)它異步傳輸數(shù)據(jù)消息消息. 對(duì)消息編碼對(duì)消息編碼, 使發(fā)送者和接受者能夠可靠地通信使發(fā)送者和接受者能夠可靠地通信, 而不而不需要知道數(shù)據(jù)的所有靜態(tài)類(lèi)型信息需要知道數(shù)據(jù)的所有靜態(tài)類(lèi)型信息.66Messagin

40、g (消息傳遞)Message BusService 1Service 2Service 3Service 4data msg 1data msg 2data msg3data msg 4關(guān)鍵應(yīng)用關(guān)鍵應(yīng)用: Enterprise Application Integration, Service Oriented Architecture67Messaging (消息傳遞)Publisher-Subscriber (發(fā)布者-訂閱者):問(wèn)題進(jìn)程間通信進(jìn)程間通信數(shù)據(jù)轉(zhuǎn)移數(shù)據(jù)封裝數(shù)據(jù)格式轉(zhuǎn)換數(shù)據(jù)路由錯(cuò)誤通知MessagingPublisher-SubscriberDomain Model組件連接數(shù)據(jù)格

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

42、態(tài)散布事件的組件也不關(guān)心哪個(gè)組件會(huì)接收它 各組件不知道彼此的位置定義一種變化傳播基礎(chǔ)設(shè)施定義一種變化傳播基礎(chǔ)設(shè)施, 發(fā)布者發(fā)布者(publisher)通過(guò)它發(fā)通過(guò)它發(fā)布事件布事件, 其他發(fā)布者可能對(duì)該事件包含的信息感興趣其他發(fā)布者可能對(duì)該事件包含的信息感興趣. 事事件發(fā)生時(shí)要告知對(duì)該事件感興趣的訂閱者件發(fā)生時(shí)要告知對(duì)該事件感興趣的訂閱者(subscriber).69Change Propagation InfrastructurePublisher 1Subscriber 2Subscriber 3Publisher 2State changeState changeState changeS

43、tate changePublisher-Subscriber (發(fā)布者-訂閱者)應(yīng)用應(yīng)用: CORBA Notification Service70Messaging (消息傳遞)Publisher-Subscriber (發(fā)布者-訂閱者):問(wèn)題進(jìn)程間通信進(jìn)程間通信數(shù)據(jù)轉(zhuǎn)移數(shù)據(jù)封裝數(shù)據(jù)格式轉(zhuǎn)換數(shù)據(jù)路由錯(cuò)誤通知MessagingPublisher-SubscriberDomain Model組件連接數(shù)據(jù)格式轉(zhuǎn)換數(shù)據(jù)路由錯(cuò)誤通知事件封裝事件轉(zhuǎn)移組件連接事件過(guò)濾什么模式可以提供解決方案什么模式可以提供解決方案?71Broker (代理者)l 背景n 需要一種通信基礎(chǔ)設(shè)施, 以之屏蔽組件位置和進(jìn)程間

44、通信的復(fù)雜性 問(wèn)題分布式應(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)將不同語(yǔ)言寫(xiě)的各類(lèi)服務(wù)移植到不同的操作系統(tǒng)平臺(tái), 是一項(xiàng)極其復(fù)雜的任務(wù)在何處以什么方式部署服務(wù), 也是一項(xiàng)復(fù)雜費(fèi)力的事情服務(wù)之間通過(guò)方法調(diào)用的協(xié)作應(yīng)該以一種與位置無(wú)關(guān)的方式進(jìn)行使用代理者使用代理者(broker)聯(lián)盟封裝分布式系統(tǒng)通信基礎(chǔ)設(shè)施的聯(lián)盟封裝分布式系統(tǒng)通信基礎(chǔ)設(shè)施的細(xì)節(jié)細(xì)節(jié), 并與應(yīng)用系統(tǒng)的功能分離并與應(yīng)用系統(tǒng)的功能分離. 要定義一種基于組件的編要定義一種基于組件的編程模型程模型, 以使客

45、戶(hù)應(yīng)用調(diào)用遠(yuǎn)程服務(wù)的方法時(shí)就象在本地調(diào)以使客戶(hù)應(yīng)用調(diào)用遠(yuǎn)程服務(wù)的方法時(shí)就象在本地調(diào)用一樣用一樣.72method_1method_2Broker (代理者)sendreceiverequestdiscoverreceivesendinvokeregistermethod_1method_2clientClientProxyClient-sideBrokerServer-sideBrokerApplicationComponentDiscover client proxyRegister componentNetwork73Broker (代理者): 問(wèn)題進(jìn)程間通信BrokerDomain Ob

46、ject請(qǐng)求分派請(qǐng)求分派代理者訪問(wèn)組件訪問(wèn)組件訪問(wèn)發(fā)布-訂閱通信組件創(chuàng)建內(nèi)部劃分OS 抽象發(fā)出請(qǐng)求接收請(qǐng)求封裝請(qǐng)求錯(cuò)誤通知代理者配置組件發(fā)現(xiàn)什么模式可以提供解決方案什么模式可以提供解決方案?743.3 事件多路分離和分派l 分布式計(jì)算的核心: 響應(yīng)和處理來(lái)自網(wǎng)絡(luò)的事件事件處理的復(fù)雜性:事件異步到達(dá)多個(gè)事件同時(shí)到達(dá)事件到達(dá)順序不確定多種類(lèi)型的事件隱藏事件多路分離和分派的復(fù)雜性事件處理軟件通常采用Layers架構(gòu)模式 事件源:sockets 事件多路分離器: WaitForMultipleObjects, select, et al 事件處理器 +應(yīng)用程序75事件多路分離和分派l模式提供高效,可擴(kuò)

47、展,可復(fù)用解決方案 Reactor(反應(yīng)器)模式 對(duì)事件執(zhí)行同步多路分離并分派給應(yīng)用程序 Proactor(前攝器)模式 對(duì)事件執(zhí)行異步多路分離和分派, 可獲得并發(fā)處理的好處并規(guī)避其缺點(diǎn) Acceptor-Connector(接收器-連接器)模式 將連接和初始化工作與其后的一般事件處理分離 Asynchronous Completion Token(異步完成令牌)模式 對(duì)異步服務(wù)請(qǐng)求的響應(yīng)提供高效的多路分離和處理76Reactor (反應(yīng)器)l 背景n 開(kāi)發(fā)事件驅(qū)動(dòng)應(yīng)用時(shí), 需要將事件的檢測(cè), 多路分離和分派等與處理時(shí)間短的服務(wù)分離 問(wèn)題事件驅(qū)動(dòng)軟件接受來(lái)自多個(gè)源的服務(wù)請(qǐng)求事件, 并對(duì)之實(shí)行多

48、路分離, 分派給事件處理器 做進(jìn)一步處理. 多個(gè)事件可能同時(shí)到達(dá), 但是為簡(jiǎn)化軟件開(kāi)發(fā), 這些事件需要順序處理, 并同步返回處理結(jié)果. 作用力(force)高效靈活處理多個(gè)源的并發(fā)事件容易集成新的或改進(jìn)的事件處理器提供一種事件處理基礎(chǔ)設(shè)施提供一種事件處理基礎(chǔ)設(shè)施, 它可以同時(shí)等待多個(gè)源的服務(wù)它可以同時(shí)等待多個(gè)源的服務(wù)請(qǐng)求事件請(qǐng)求事件, 但是每次只分離一個(gè)事件但是每次只分離一個(gè)事件, 并將該事件分派給相并將該事件分派給相應(yīng)的事件處理器去執(zhí)行對(duì)應(yīng)的服務(wù)應(yīng)的事件處理器去執(zhí)行對(duì)應(yīng)的服務(wù)77event loopReactor (反應(yīng)器)A clientdemux eventevent _loop()be

49、gin # run an infinite event loop for (ever) # block waiting for events to occur event = demux _events(); # dispatch the event handler = identify _handler (event); handler. handle _event (event); rofendhandle eventhandle eventhandle eventEvent handlersStart event processingReactorOperating SystemSend

50、 service request event132478Proactor (前攝器)l 背景n 開(kāi)發(fā)事件驅(qū)動(dòng)應(yīng)用時(shí), 需要將事件的檢測(cè), 多路分離和分派等與處理時(shí)間長(zhǎng)的服務(wù)分離 問(wèn)題為獲得高性能和高吞吐量, 事件驅(qū)動(dòng)軟件需要同時(shí)處理多個(gè)事件, 但是又不希望使用多線程 作用力(force)對(duì)服務(wù)請(qǐng)求的處理不能延遲太久性能和吞吐量要最大化容易集成新的和改進(jìn)的組件將應(yīng)用程序功能分為異步操作和完成處理器兩部分將應(yīng)用程序功能分為異步操作和完成處理器兩部分. 異步操作針對(duì)事件異步操作針對(duì)事件源執(zhí)行某些活動(dòng)源執(zhí)行某些活動(dòng), 而完成處理器使用異步操作的結(jié)果而完成處理器使用異步操作的結(jié)果. 異步操作和完成異步操

51、作和完成處理器共同實(shí)現(xiàn)應(yīng)用的服務(wù)邏輯處理器共同實(shí)現(xiàn)應(yīng)用的服務(wù)邏輯. 異步操作由操作系統(tǒng)執(zhí)行異步操作由操作系統(tǒng)執(zhí)行, 而完成處而完成處理器在應(yīng)用的控制線程中執(zhí)行理器在應(yīng)用的控制線程中執(zhí)行79event loopProactor (前攝器)A clientdemux eventhandle _event (Event event)begin # Process the received event if (event. type=Request) # read request asynchronously # and return control async _read(); elseif (ev

52、ent. Type =READ_COMPLETE) # Process event, deliver results # asynchronously, and return control process_ data(); async _write(); fiendhandle eventhandle eventCompletion handlersStart event processingProactorOperating SystemSend service request event1324async writeasync read80Reactor (反應(yīng)器), Proactor

53、(前攝器):問(wèn)題ReactorProactorServer Request HandlerClient RequestHandler同步事件處理異步事件處理異步事件處理同步事件處理實(shí)現(xiàn)的變化實(shí)現(xiàn)的變化事件處理器類(lèi)型事件處理器類(lèi)型事件源封裝事件源封裝并發(fā)事件處理并發(fā)事件處理并發(fā)事件處理事件處理器分派完成處理器分派什么模式可以提供解什么模式可以提供解決方案決方案?81Acceptor-Connector(接受器-連接器)l 背景n 在面向連接的網(wǎng)絡(luò)系統(tǒng)中實(shí)現(xiàn)事件處理器時(shí), 建立連接以及初始化事件處理器等基本活動(dòng)需要與處理應(yīng)用特定服務(wù)的功能分離 問(wèn)題網(wǎng)絡(luò)系統(tǒng)中對(duì)等的事件處理器在執(zhí)行其服務(wù)功能前需要先

54、建立連接并初始化, 建立連接以及初始化代碼與其服務(wù)功能基本無(wú)關(guān) 作用力(force)事件處理器服務(wù)的變化比連接建立和初始化策略的變化快事件處理器可能動(dòng)態(tài)改變其在連接中的角色在網(wǎng)絡(luò)系統(tǒng)中在網(wǎng)絡(luò)系統(tǒng)中, 將對(duì)等事件處理器的連接和初始化與之后執(zhí)將對(duì)等事件處理器的連接和初始化與之后執(zhí)行的服務(wù)解耦行的服務(wù)解耦82connect134serviceinitAcceptor-Connector (接受器-連接器)acceptserviceinitconnectoracceptorService handlerConnect mePass connection3Pass connectionPerform w

55、ork2AcceptconnectionService handlerA peer componentAnother peer component83Acceptor-Connector (接受器-連接器):問(wèn)題Acceptor-ConnectorServer Request HandlerClient RequestHandlerProactor事件處理器類(lèi)型Reactor事件處理器類(lèi)型完成處理器類(lèi)型創(chuàng)建服務(wù)處理器封裝IPC機(jī)制管理事件處理器連接管理的變化并發(fā)服務(wù)處理器84Asynchronous Completion Token (異步完成令牌)l 背景n 在使用異步通信的系統(tǒng)中, 需要高

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

57、patchserviceAsynchronous Completion Token (異步完成令牌)Client2process resultasync_ operationSend requestReturn responseDispatch resultProcess resultACTService86Asynchronous Completion Token (異步完成令牌): 問(wèn)題AsynchronousCompletion TokenFuture未來(lái)通告完成處理器通告ProactorACT管理873.4 接口分割l 組件接口要告知客戶(hù)其職責(zé), 提供的服務(wù), 以及使用契約l 利于客戶(hù)

58、正確有效地與之合作l 設(shè)計(jì)高質(zhì)量的組件接口, 需要解決的問(wèn)題 組件的職責(zé)與契約規(guī)范 質(zhì)量屬性 描述性和簡(jiǎn)單性 松耦合和穩(wěn)定性 組件的分布性 組件及其客戶(hù)的異質(zhì)性 88接口分割l 相關(guān)模式n Explicit Interface (顯式接口)n Extension Interface (擴(kuò)展接口)n Introspective Interface (內(nèi)省接口)n Dynamic Invocation Interface (動(dòng)態(tài)調(diào)用接口)n Business Delegate (業(yè)務(wù)代理)n Proxy (代理)n Faade (外觀)n Combined Method (組合方法)n Itera

59、tor (迭代器)n Enumeration Method (枚舉方法)n Batch Method (批處理方法)89Explicit Interface (顯式接口)l 背景n 軟件架構(gòu)工作的主要關(guān)注點(diǎn)之一: 有效恰當(dāng)?shù)乇硎鼋M件接口 問(wèn)題一個(gè)組件代表一個(gè)自含的功能單位及其發(fā)布的使用契約. 客戶(hù)可以使用它來(lái)建立自己的功能, 但是直接訪問(wèn)組件的完全實(shí)現(xiàn), 則會(huì)導(dǎo)致客戶(hù)依賴(lài)組件的內(nèi)部表示, 最終增加了應(yīng)用程序內(nèi)部的耦合度 作用力(force)客戶(hù)只能依賴(lài)組件發(fā)布的接口, 對(duì)實(shí)現(xiàn)的修改不能影響客戶(hù)客戶(hù)不倚賴(lài)組件的地理位置組件提供的方法對(duì)客戶(hù)有意義, 能有效正確使用將組件接口的聲明與實(shí)現(xiàn)分離將組件接

60、口的聲明與實(shí)現(xiàn)分離, 只對(duì)客戶(hù)曝露組件接口只對(duì)客戶(hù)曝露組件接口, 同同時(shí)隱藏實(shí)現(xiàn)和位置時(shí)隱藏實(shí)現(xiàn)和位置90Method _Bmethod _AExplicit Interface(顯式接口)method _B _impmethod _A_ impClientInterfaceImplementationPolymorphic dispatchComponent91Explicit Interface (顯式接口): 問(wèn)題Explicit InterfaceDomain ObjectReactorProactorCommandInterceptorChain of ResponsibilityItera

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論