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

下載本文檔

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

文檔簡介

軟件架構(gòu)與設(shè)計模式第一頁,共一百三十四頁,2022年,8月28日1.軟件架構(gòu)軟件架構(gòu)定義架構(gòu)設(shè)計方法與過程軟件架構(gòu)的設(shè)計要點2.模式簡介模式的定義模式的分類3.常用模式從混沌到結(jié)構(gòu)分布式基礎(chǔ)設(shè)施事件多路分離和分派接口分割組件分割4.典型面向服務(wù)的架構(gòu)SOA目錄第二頁,共一百三十四頁,2022年,8月28日21.軟件架構(gòu)第三頁,共一百三十四頁,2022年,8月28日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)件可以是一組代碼,如程序的模塊;也可以是一個獨立的程序;連接件可以是過程調(diào)用、管道、遠程過程調(diào)用(RPC)等,用于表示構(gòu)件之間的相互作用;約束一般為對象連接時的規(guī)則,或指明構(gòu)件連接的形式和條件,例如,上層構(gòu)件可要求下層構(gòu)件的服務(wù),反之不行;兩對象不得遞規(guī)地發(fā)送消息;代碼復(fù)制遷移的一致性約束;什么條件下此種連接無效等。第四頁,共一百三十四頁,2022年,8月28日4架構(gòu)定義軟件架構(gòu)不僅僅注重軟件本身的結(jié)構(gòu)和行為,還注重其他特性:使用,功能性,性能,彈性,重用,可理解性,經(jīng)濟和技術(shù)的限制及權(quán)衡。第五頁,共一百三十四頁,2022年,8月28日5例:ACE的分層架構(gòu)第六頁,共一百三十四頁,2022年,8月28日6架構(gòu)的范圍軟件架構(gòu)—本門課程的主關(guān)注點。硬件架構(gòu)—包括CPU,內(nèi)存,硬盤,周邊設(shè)備例如打印機,與連接這些元素的部分。組織架構(gòu)—是一些關(guān)于商業(yè)進程,組織結(jié)構(gòu),規(guī)則和職責,與組織核心能力的部分。信息架構(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)很相似,包括硬件,軟件,人員等。第七頁,共一百三十四頁,2022年,8月28日7

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

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

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

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

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

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

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

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

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

常重要。

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

可定制化(Customizable)。同樣的一套軟件,可以根據(jù)客戶群的不同和市場需求的變化進行調(diào)整。第十三頁,共一百三十四頁,2022年,8月28日13軟件架構(gòu)的目標

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

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

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

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

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

市場時機(TimetoMarket)。軟件用戶要面臨同業(yè)競爭,軟件提供商也要面

臨同業(yè)競爭。以最快的速度爭奪市場先機非常重要。第十四頁,共一百三十四頁,2022年,8月28日14軟件架構(gòu)的種類軟件系統(tǒng)的邏輯架構(gòu)圖邏輯架構(gòu):軟件系統(tǒng)中元件之間的關(guān)系,比如用戶界面,數(shù)據(jù)庫,外部系統(tǒng)接口,商業(yè)邏輯元件,等等第十五頁,共一百三十四頁,2022年,8月28日15軟件架構(gòu)的種類物理架構(gòu):軟件元件是怎樣放到硬件上的軟件系統(tǒng)的物理架構(gòu)圖第十六頁,共一百三十四頁,2022年,8月28日16軟件架構(gòu)的種類系統(tǒng)架構(gòu):系統(tǒng)的非功能性特征,如可擴展性、可靠性、強壯性、靈活性、

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

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

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

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

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

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

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

就很難更改的。第十七頁,共一百三十四頁,2022年,8月28日17視圖可以表示系統(tǒng)的整體設(shè)計,但構(gòu)架與以下幾個具體方面相關(guān):

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

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

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

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

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

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

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

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

向團隊或分包商分配開發(fā)工作。

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

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

構(gòu)架重點

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

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

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

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

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

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

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

事件源:

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

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

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

(異步完成令牌)Client2processresultasync_operationSendrequestReturnresponseDispatchresultProcessresultACTService第八十六頁,共一百三十四頁,2022年,8月28日86AsynchronousCompletionToken

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

RealSubject+Request()Subject+Request()

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

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

Facade第九十九頁,共一百三十四頁,2022年,8月28日99Facade(外觀):問題Facade接口類型整體實現(xiàn)外觀類型ExplicitInterfaceBrokerComponentConfiguratorWhole-Part接口類型?第一百頁,共一百三十四頁,2022年,8月28日100Iterator(迭代器)背景需要順序訪問組合對象的各元素,而不曝露對象的內(nèi)部結(jié)構(gòu)問題客戶通常需要遍歷聚合體中封裝的每個元素.但是客戶可能不希望依賴聚合體的內(nèi)部結(jié)構(gòu),聚合體也不希望曝露其內(nèi)部結(jié)構(gòu)作用力(force)客戶以最能滿足其需要的特定順序遍歷聚合體并發(fā)訪問:多個客戶可能同時訪問聚合體,單個客戶的多個線程也可能同時訪問將訪問和遍歷聚合體元素的策略對象化,建立迭代器對象.客戶只能通過迭代器訪問元素,迭代器必要時可以訪問聚合體內(nèi)部表示第一百零一頁,共一百三十四頁,2022年,8月28日101nextcurrentIterator(迭代器)Clientemptyfindcreate_iteratorinsertAggregateinterfaceremovetraversalstateIteratorElementElement12Accesselement34513Obtainiterator2Requestelement4Returnelement5Returnelement第一百零二頁,共一百三十四頁,2022年,8月28日102Iterator(迭代器)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)告訴我密碼!----天下無賊第一百零三頁,共一百三十四頁,2022年,8月28日103Iterator(迭代器):問題Iterator聚合體遍歷塊訪問生命周期管理CompositeEnumerationMethodExplicitInterfaceObjectManager健壯性???第一百零四頁,共一百三十四頁,2022年,8月28日1043.5組件分割軟件由定義良好的組件構(gòu)成,每個組件通過接口提供特定的,內(nèi)聚的的服務(wù)組件封裝實現(xiàn)細節(jié)組件劃分組件質(zhì)量組件靈活性組件功能的分布單個組件的并發(fā)性良好封裝面臨的挑戰(zhàn)第一百零五頁,共一百三十四頁,2022年,8月28日1053.5組件分割相關(guān)模式EncapsulatedImplementation(封裝實現(xiàn))Whole-Part(部分-整體)Composite(組成)Master-Slave(主從)Half-ObjectPlusProtocol(半對象協(xié)議)ReplicatedComponentGroup(復(fù)制組件組)Flyweight(享元)第一百零六頁,共一百三十四頁,2022年,8月28日106EncapsulatedImplementation(封裝實現(xiàn))背景實現(xiàn)組件接口問題組件通過接口提供服務(wù),但是接口只是承諾,組件必須實現(xiàn)此承諾.組件的實現(xiàn)受許多假設(shè),顧慮以及約束等接口不能反映的因素的影響作用力(force)組件實現(xiàn)受許多約束和需求影響,而組件使用者并不關(guān)心這些支持演化,并屏蔽對客戶的影響確保所有組件的實現(xiàn)細節(jié)隱藏在接口后面,從而使客戶與不同的實現(xiàn)或?qū)崿F(xiàn)的特定部署解耦第一百零七頁,共一百三十四頁,2022年,8月28日107Method_Bmethod_Amethod_B_impmethod_A_impClientInterfaceImplementationPolymorphicdispatchComponentEncapsulatedImplementation(封裝實現(xiàn))第一百零八頁,共一百三十四頁,2022年,8月28日108組件實現(xiàn)適配與擴展EncapsulatedImplementationEncapsulatedImplementation(封裝實現(xiàn)):問題DomainObjectLayersBridge同步訪問組件表示分布式部署并發(fā)實現(xiàn)?????第一百零九頁,共一百三十四頁,2022年,8月28日109Composite(組成)背景需要將部分-整體層級結(jié)構(gòu)中的聚合對象與原子對象一致對待問題有時部分-整體層級結(jié)構(gòu)由對象遞歸組合而成,這些對象支持相同的接口,但是客戶對結(jié)構(gòu)的具體布局和遞歸特性不感興趣,而是統(tǒng)一對待各層對象作用力(force)需要在部分-整體布局中保持遞歸層級結(jié)構(gòu)對象的重新布局不能影響客戶增加新對象對原來類型的影響要最小聲明一個組件接口,該接口的功能對部分-整體層級結(jié)構(gòu)中的所有對象都適用.子類化該接口,以實現(xiàn)特定的對象以及它們的遞歸組合第一百一十頁,共一百三十四頁,2022年,8月28日110methodComposite(組成)methodmethodClientCompositeObjectComponentInterfaceLeafObjectImplementsInterfaceMaintainspartsthatimplementtheinterface第一百一十一頁,共一百三十四頁,2022年,8月28日111Composite(組成)

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()}第一百一十二頁,共一百三十四頁,2022年,8月28日112Composite(組成):問題CompositeEncapsulatedImplementation內(nèi)部結(jié)構(gòu)DecoratorInterpreter元素訪問組件表示?第一百一十三頁,共一百三十四頁,2022年,8月28日113Flyweight(享元)背景需要有效支持大量細粒度對象問題應(yīng)用程序使用了大量對象,造成很大的存儲開銷作用力(force)區(qū)分內(nèi)部和外部狀態(tài)應(yīng)用程序不倚賴于對象標識應(yīng)用共享技術(shù)支持大量細粒度的對象.內(nèi)部狀態(tài)存儲于享元對象中,外部狀態(tài)則由客戶存儲或計算第一百一十四頁,共一百三十四頁,2022年,8月28日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]1第一百一十五頁,共一百三十四頁,2022年,8月28日115Flyweight(享元):問題Flyweight細粒度共享組件共享對象創(chuàng)建EncapsulatedImplementationCompositeStrategyState?第一百一十六頁,共一百三十四頁,2022年,8月28日1164.典型面向服務(wù)的架構(gòu)SOA第一百一十七頁,共一百三十四頁,2022年,8月28日117服務(wù)包含4個主要方面:提供、使用、說明、中介。什么是服務(wù)IT系統(tǒng)所實現(xiàn)的服務(wù),必須與出納員向客戶提供的服務(wù)一致,并且必須對出納員提供支持。如果“IT系統(tǒng)提供服務(wù)的定義”與“業(yè)務(wù)功能與業(yè)務(wù)流程”一致,那么IT系統(tǒng)

溫馨提示

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

最新文檔

評論

0/150

提交評論