軟件體系結(jié)構(gòu)風(fēng)格——詳細(xì)版_第1頁
軟件體系結(jié)構(gòu)風(fēng)格——詳細(xì)版_第2頁
軟件體系結(jié)構(gòu)風(fēng)格——詳細(xì)版_第3頁
軟件體系結(jié)構(gòu)風(fēng)格——詳細(xì)版_第4頁
軟件體系結(jié)構(gòu)風(fēng)格——詳細(xì)版_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、主程序/子程序(MainProgram/SubroutineStyle)結(jié)構(gòu):Components: 函數(shù)Connectors: 函數(shù)間的調(diào)用特點:控制從頂層開始,逐漸細(xì)化至最低層層次化分解:先聲明后定義單線程控制隱含“子系統(tǒng)結(jié)構(gòu)“層次化推理:一個子過程的正確性取決于它所調(diào)用的子過程優(yōu)點=處理過程清晰,易于理解=很強(qiáng)的正確性控制缺點=難于改變和重用=處理不好會變成公共耦合使用情景:順序系統(tǒng)對正確性要求高的系統(tǒng)子程序。主程序是系統(tǒng)的控制器,負(fù)責(zé)調(diào)度各子程序的執(zhí)行。各子程序又是一個局部的控制器,調(diào)度其子子程序的執(zhí)行。主程序/子程序風(fēng)格的重要設(shè)計決策與約束有:基于聲明-使用(程序調(diào)用)關(guān)系建立連接件

2、,以層次分解的方式建立系統(tǒng)部件,共同組成層次結(jié)構(gòu)。每一個上層部件可以“使用”下層部件,但下層部件不能“使用”上層部件,即不允許逆方向調(diào)用。系統(tǒng)應(yīng)該是單線程執(zhí)行。主程序部件擁有最初的執(zhí)行控制權(quán),并在“使用”中將控制權(quán)轉(zhuǎn)移給下層子程序。子程序只能夠通過上層轉(zhuǎn)移來獲得控制權(quán),可以在執(zhí)行中將控制權(quán)轉(zhuǎn)交給下層的子子程序,并在自身執(zhí)行完成之后必須將控制權(quán)還交給上層部件。主程序/子程序風(fēng)格的優(yōu)點有:流程清晰,易于理解。嚴(yán)格的層次分解使得整個系統(tǒng)的結(jié)構(gòu)組織非常符合功能分解和分而治之的思維方式,從而能夠清晰地描述整個系統(tǒng)的執(zhí)行流程,易于理解。強(qiáng)控制性。嚴(yán)格的層次分解和嚴(yán)格的控制權(quán)轉(zhuǎn)移使得主程序/子程序風(fēng)格對程序

3、的實際執(zhí)行過程具備很強(qiáng)的控制能力,這帶來了一個特點:如果一個子程序所連接的子子程序是正確的,那么就很容易保證該子程序的“正確性”。所以,主程序/子程序風(fēng)格比其他常見風(fēng)格更能控制程序的“正確性”主程序/子程序風(fēng)格的缺點有:程序調(diào)用是一種強(qiáng)耦合的連接方式,非常依賴交互方的接口規(guī)格,這會使得系統(tǒng)難以修改和復(fù)用。程序調(diào)用的連接方式限制了各部件之間的數(shù)據(jù)交互,可能會使得不同部件使用隱含的共享數(shù)據(jù)交流,產(chǎn)生不必要的公共耦合,進(jìn)而破壞它的“正確性”控制能力。面向?qū)ο笫降?object-oriented)結(jié)構(gòu):用封裝實現(xiàn)信息隱藏和可修改,只保留有限接口Components: 對象或組件Connectors:

4、函數(shù)或引用特點:對其他對象 信息封裝與隱藏對象有義務(wù)維護(hù)自己封裝信息的一致性對象自制優(yōu)點:因為對象對其它對象隱藏它的表示,所以可以改變一個對象的表示,而不影響其它的對象。設(shè)計者可將一些數(shù)據(jù)存取操作的問題分解成一些交互的代理程序的集合。缺點:為了使一個對象和另一個對象通過過程調(diào)用等進(jìn)行交互,必須知道對象的標(biāo)識。只要一個對象的標(biāo)識改變了,就必須修改所有其他明確調(diào)用它的對象。必須修改所有顯式調(diào)用它的其它對象,并消除由此帶來的一些副作用。例如,如果A使用了對象B,C也使用了對象B,那么,C對B的使用所造成的對A的影響可能是料想不到的。使用情景:核心問題是識別并保護(hù)相關(guān)信息體的程序、抽象數(shù)據(jù)類型面向?qū)ο?/p>

5、式風(fēng)格借鑒面向?qū)ο蟮乃枷?,組織整個系統(tǒng)的高層結(jié)構(gòu)。面向?qū)ο笫斤L(fēng)格將系統(tǒng)組織為多個獨立的對象,每個對象封裝其內(nèi)部的數(shù)據(jù),并基于數(shù)據(jù)對外提供服務(wù)。不同對象之間通過協(xié)作機(jī)制共同完成系統(tǒng)任務(wù)。面向?qū)ο笫斤L(fēng)格的重要設(shè)計決策及約束有:依照對數(shù)據(jù)的使用情況,用信息內(nèi)聚的標(biāo)準(zhǔn),為系統(tǒng)建立對象部件。每個對象部件基于內(nèi)部數(shù)據(jù)提供對外服務(wù)接口,并隱藏內(nèi)部數(shù)據(jù)的表示。基于方法調(diào)用(Method Invocation)機(jī)制建立連接件,將對象部件連接起來。每個對象負(fù)責(zé)維護(hù)其自身數(shù)據(jù)的一致性與完整性,并以此為基礎(chǔ)對外提供“正確”的服務(wù)。每個對象都是一個自治單位,不同對象之間是平級的,沒有主次、從屬、層次、分解等關(guān)系。面向?qū)?/p>

6、象式風(fēng)格適用于那些能夠基于數(shù)據(jù)信息分解和組織的軟件系統(tǒng),這些系統(tǒng):主要問題是標(biāo)識和保護(hù)相關(guān)的數(shù)據(jù)信息;能夠?qū)?shù)據(jù)信息和相關(guān)操作聯(lián)系起來,進(jìn)行封裝。實踐中,基于抽象數(shù)據(jù)類型建立的軟件系統(tǒng)大多屬于面向?qū)ο笫斤L(fēng)格。分層風(fēng)格結(jié)構(gòu):Components: 一系列過程和對象Connectors: 限制可見性的函數(shù)或引用特點:底層為上層提供服務(wù),上層作為底層的客戶。不許跨層一些設(shè)計可以允許你省略部分層,當(dāng)效率很重要的時候優(yōu)點:= Design:按照抽象層次設(shè)計(越上層抽象層次越高)= Enhancement: 一層的變化最多影響上下兩層= Reuse:每一層在接口一定的情況下都能容易地改變實現(xiàn)支持基于抽象程

7、度遞增的系統(tǒng)設(shè)計,使設(shè)計者可以把一個復(fù)雜系統(tǒng)按遞增的步驟進(jìn)行分解;支持功能增強(qiáng),因為每一層至多和相鄰的上下層交互,因此功能的改變最多影響相鄰的上下層;支持重用。只要提供的服務(wù)接口定義不變,同一層的不同實現(xiàn)可以交換使用。這樣,就可以定義一組標(biāo)準(zhǔn)的接口,而允許各種不同的實現(xiàn)方法。缺點:= 不是所有的系統(tǒng)都能以層次式組織= 性能需求有可能需要高層功能與底層實現(xiàn)之間的耦合并不是每個系統(tǒng)都可以很容易地劃分為分層的模式,甚至即使一個系統(tǒng)的邏輯結(jié)構(gòu)是層次化的,出于對系統(tǒng)性能的考慮,系統(tǒng)設(shè)計師不得不把一些低級或高級的功能綜合起來;很難找到一個合適的、正確的層次抽象方法。使用情景:包含一系列可被分層服務(wù)的程序,

8、如分層通訊協(xié)議,操作系統(tǒng)分層風(fēng)格根據(jù)不同的抽象層次,將系統(tǒng)組織為層次式結(jié)構(gòu)。每個層次被建立為一個部件,不同部件之間通常用程序調(diào)用方式進(jìn)行連接,因此連接件被建立為程序調(diào)用機(jī)制。分層風(fēng)格的重要設(shè)計決策與約束有:從最底層到最高層,部件的抽象層次逐漸提升。每個下層為鄰接上層提供服務(wù),每個上層將鄰接下層作為基礎(chǔ)設(shè)施使用。也就是說,在程序調(diào)用機(jī)制中上層調(diào)用下層。兩個層次之間的連接要遵守特定的交互協(xié)議,該交互協(xié)議應(yīng)該是成熟、穩(wěn)定和標(biāo)準(zhǔn)化的。也就是說,只要遵守交互協(xié)議,不同部件實例之間是可以互相替換的。跨層次的連接是禁止的,不允許第I層直接調(diào)用I+N(N1)層的服務(wù)。逆向的連接是禁止的,不允許第I層調(diào)用第J(

9、JI)層的服務(wù)。分層風(fēng)格的優(yōu)點有:設(shè)計機(jī)制清晰,易于理解。通過將系統(tǒng)按照不同的抽象層次組織為層次結(jié)構(gòu),分層風(fēng)格可以將混雜的耦合邏輯分解為幾個不同的部分(例如網(wǎng)絡(luò)通訊協(xié)議的分層),每個部分變得更簡單、純粹和易于理解,從而使得整個設(shè)計機(jī)制非常清晰。支持并行開發(fā)。分層風(fēng)格的不同層次之間遵守成熟、穩(wěn)定和標(biāo)準(zhǔn)化的交互協(xié)議,也就是說一旦層次之間的連接明確下來,就很少會發(fā)生改變。而且只要不破壞交互協(xié)議,每個層次內(nèi)部的開發(fā)決策不會對其他層次內(nèi)部的開發(fā)決策產(chǎn)生影響。所以分層風(fēng)格能夠支持并行開發(fā),它的每個層次都可以交給一個團(tuán)隊進(jìn)行獨立開發(fā)。更好的可復(fù)用性與內(nèi)部可修改性。因為不同層次之間通過成熟、穩(wěn)定的交互協(xié)議通信

10、,因此,只要遵守其交互協(xié)議,不同的層次部件就能夠互相替換,具有很好的可復(fù)用性。在不影響交互協(xié)議的情況下,每個層次可以自由安排其內(nèi)部實現(xiàn)機(jī)制,因此分層風(fēng)格也具有很好的內(nèi)部可修改性。分層風(fēng)格的缺點有:交互協(xié)議難以修改。雖然分層風(fēng)格能夠?qū)崿F(xiàn)很好的內(nèi)部可修改性,但是它難以修改交互協(xié)議,這也是它要求交互協(xié)議比較成熟和穩(wěn)定的原因。因為,一方面,對交互協(xié)議的修改意味著層次的對外行為需要變更;另一方面,不同層次是對同一系統(tǒng)的不同程度抽象,因此對外行為常常是存在于所有層次,只是抽象程度不同而已。最后,如果交互協(xié)議需要改變,那么就可能需要改變所有的層次。性能損失。分層風(fēng)格禁止跨層調(diào)用,這使得每一個外界請求都需要沿

11、著層次逐一深入,多次調(diào)用,這可能會產(chǎn)生冗余的調(diào)用處理,帶來不必要的性能損失。難以確定層次數(shù)量和粒度。如果層的粒度太大,就只會有少數(shù)幾個層次,不能完全發(fā)揮分層風(fēng)格的可復(fù)用性和內(nèi)部可修改性。反之,如果層的粒度太小,層次的數(shù)量就會太多,引入不必要的復(fù)雜性,帶來額外的性能損失。分層風(fēng)格適用于具備下列特性的系統(tǒng):主要功能是能夠在不同抽象層次上進(jìn)行任務(wù)分解的復(fù)雜處理;能夠建立不同抽象層次之間的穩(wěn)定交互協(xié)議;沒有很高的實時性能要求,能夠容忍稍許的延遲;此外,那些需要進(jìn)行并行開發(fā)的軟件系統(tǒng)也可能會使用分層風(fēng)格,以便于任務(wù)分配和工作開展。隱式調(diào)用風(fēng)格結(jié)構(gòu):Components: 代理程序(對象、程序、進(jìn)程)Co

12、nnectors: 廣播媒介(事件處理器)特點:一個組件聲明事件,另一些組件以函數(shù)去注冊事件,當(dāng)事件觸發(fā)時,Connector自動觸發(fā)相關(guān)函數(shù)調(diào)用。事件通知者不知道誰接受事件不能假定事件是否被處理以及被處理的順序優(yōu)點:為軟件重用提供了強(qiáng)大的支持。當(dāng)需要將一個構(gòu)件加入現(xiàn)存系統(tǒng)中時,只需將它注冊到系統(tǒng)的事件中。為改進(jìn)系統(tǒng)帶來了方便。當(dāng)用一個構(gòu)件代替另一個構(gòu)件時,不會影響到其它構(gòu)件的接口。缺點:構(gòu)件放棄了對系統(tǒng)計算的控制。一個構(gòu)件觸發(fā)一個事件時,不能確定其它構(gòu)件是否會響應(yīng)它。而且即使它知道事件注冊了哪些構(gòu)件的構(gòu)成,它也不能保證這些過程被調(diào)用的順序。數(shù)據(jù)交換的問題。有時數(shù)據(jù)可被一個事件傳遞,但另一些情

13、況下,基于事件的系統(tǒng)必須依靠一個共享的倉庫進(jìn)行交互。在這些情況下,全局性能和資源管理便成了問題。既然過程的語義必須依賴于被觸發(fā)事件的上下文約束,關(guān)于正確性的推理存在問題。使用情景:一系列松耦合的組件,一些組件在執(zhí)行操作時,影響另一些組件隱式調(diào)用風(fēng)格(Implicit Invocation Style),又被稱為發(fā)布-訂閱風(fēng)格(Publish Subscribe Style)、基于事件的風(fēng)格(Event Based Style)和選擇性廣播風(fēng)格(Selective Broadcast Style)隱式調(diào)用風(fēng)格將系統(tǒng)中的不同功能部分建立為部件,并使用事件(而不是程序調(diào)用)來實現(xiàn)不同部件之間的連接,

14、也就是說隱式調(diào)用風(fēng)格使用事件傳播機(jī)制事件路由,來建立連接件。隱式調(diào)用風(fēng)格中的行為者仍然會聲明可調(diào)用程序來提供對外的服務(wù),但是這些程序卻不會直接被外界調(diào)用。隱式調(diào)用風(fēng)格采用的機(jī)制是將特定的事件類型與行為者的程序聯(lián)系起來,在相應(yīng)事件發(fā)生后,通過聯(lián)系可以找到需要調(diào)用的程序并將其調(diào)用執(zhí)行,這就是該風(fēng)格被稱為“隱式調(diào)用”的原因。對可調(diào)用程序接口的管理及其與事件類型的匹配都是連接件的工作。隱式調(diào)用風(fēng)格的重要設(shè)計決策與約束有:如果部件A和部件B需要相互協(xié)作,實現(xiàn)A調(diào)用B的效果,那么隱式調(diào)用風(fēng)格的協(xié)作機(jī)制為:1部件A向部件路由R聲明它將要拋出的事件類型e;2部件B在事件路由R中注冊“事件-程序”的映射關(guān)系,表

15、明如果發(fā)生事件e,事件路由R可以調(diào)用B的程序p;3在部件A需要與部件B協(xié)作時,部件A向事件路由廣播事件e;4事件路由根據(jù)注冊的映射關(guān)系,將部件B的程序p調(diào)入執(zhí)行。多個部件可以聲明同一個事件類型,每一個部件的事件廣播都有相同的調(diào)用效果。多個部件可以注冊同一個事件類型,并在事件發(fā)生后同時被調(diào)用執(zhí)行;事件的廣播者不知道哪些部件會受到影響,不能假設(shè)事件對部件的影響關(guān)系,甚至不能假設(shè)事件一定會有接收者。部件不能假設(shè)對事件的處理順序,也不能假設(shè)對事件的處理結(jié)果。隱式調(diào)用風(fēng)格的優(yōu)點有:可復(fù)用性。只需要注冊一個事件,任何一個部件都可以融入系統(tǒng),不再存在接口兼容與匹配的問題,所以隱式調(diào)用風(fēng)格的一個優(yōu)點是能夠很好

16、地支持可復(fù)用性??尚薷男?。在隱式調(diào)用風(fēng)格中,部件實例對交互的參與只依賴于事件類型,不受接口規(guī)格的影響,所以只需保持對事件類型的依賴不變,就能夠完成部件實例內(nèi)部和接口的變更。即使要修改對事件類型的依賴,也相對比較容易,因為它對事件類型的依賴關(guān)系是動態(tài)維護(hù)而非靜態(tài)綁定的。性能。如果隱式調(diào)用風(fēng)格的部件實例采用進(jìn)程實現(xiàn),就可以做到多進(jìn)程并發(fā)執(zhí)行,所以隱式調(diào)用風(fēng)格有潛在的高性能優(yōu)點。隱式調(diào)用風(fēng)格的缺點有:弱控制性。在隱式調(diào)用風(fēng)格中,任何一個部件都無法控制整個系統(tǒng)的執(zhí)行流程,當(dāng)發(fā)布一個事件時,甚至不能保證會有其他部件做出反應(yīng),對于有反應(yīng)的部件,也不能假設(shè)其處理結(jié)果。所以,隱式調(diào)用風(fēng)格在保證程序“正確性”上

17、有更多的困難,具有弱控制性。難以測試和驗證。在程序調(diào)用機(jī)制中,只需要保證程序執(zhí)行前和執(zhí)行后的一致性,就能夠測試和驗證程序的“正確性”。但是在隱式調(diào)用風(fēng)格中,廣播事件和接收事件的部件雙方都不知曉對方,也不知曉接收事件的處理順序,所以它們無法確認(rèn)被調(diào)用程序執(zhí)行前的上下文環(huán)境,不能保證程序執(zhí)行前的一致性,也就難以測試和驗證程序的“正確性”。隱式調(diào)用風(fēng)格適用于能夠以松散耦合部件為基礎(chǔ)建立的軟件系統(tǒng),這些系統(tǒng)中的每個部件都執(zhí)行一些操作,并可能會順次調(diào)用其他部件的操作。在實際應(yīng)用中,隱式調(diào)用被看作是一種重要的程序設(shè)計技術(shù)和集成手段,得到了廣泛的應(yīng)用。例如,編譯環(huán)境中的工具集成,數(shù)據(jù)庫管理系統(tǒng)中的一致性檢查

18、,圖形化用戶界面等,都有很多應(yīng)用隱式調(diào)用風(fēng)格的成功案例。管道-過濾器風(fēng)格:結(jié)構(gòu):Components: Filter,提供數(shù)據(jù)本地轉(zhuǎn)化,并且使用增量處理,已使得輸出數(shù)據(jù)再所有輸入數(shù)據(jù)完成之前產(chǎn)生Connectors: Pipe,作為流傳輸?shù)耐ǖ溃岩粋€Filter的輸出傳到另一個的輸入特點:Filter之間不共享狀態(tài)Filter不知道它上下游Filter的身份整個網(wǎng)絡(luò)的正確性不應(yīng)該依賴于Filter的排列順序優(yōu)點:使得軟構(gòu)件具有良好的隱蔽性和高內(nèi)聚、低耦合的特點;允許設(shè)計者將整個系統(tǒng)的輸入/輸出行為看成是多個過濾器的行為的簡單合成;支持軟件重用。只要提供適合在兩個過濾器之間傳送的數(shù)據(jù),任何兩個

19、過濾器都可被連接起來;系統(tǒng)維護(hù)和增強(qiáng)系統(tǒng)性能簡單。新的過濾器可以添加到現(xiàn)有系統(tǒng)中來;舊的可以被改進(jìn)的過濾器替換掉;允許對一些如吞吐量、死鎖等屬性的分析;支持并行執(zhí)行。每個過濾器是作為一個單獨的任務(wù)完成,因此可與其它任務(wù)并行執(zhí)行。缺點:通常導(dǎo)致進(jìn)程成為批處理的結(jié)構(gòu)。這是因為雖然過濾器可增量式地處理數(shù)據(jù),但它們是獨立的,所以設(shè)計者必須將每個過濾器看成一個完整的從輸入到輸出的轉(zhuǎn)換。傳輸數(shù)據(jù)需要額外的空間。不適合處理交互的應(yīng)用。當(dāng)需要增量地顯示改變時,這個問題尤為嚴(yán)重。因為在數(shù)據(jù)傳輸上沒有通用的標(biāo)準(zhǔn),每個過濾器都增加了解析和合成數(shù)據(jù)的工作,這樣就導(dǎo)致了系統(tǒng)性能下降,并增加了編寫過濾器的復(fù)雜性。使用情景

20、:對有序數(shù)據(jù)進(jìn)行一系列獨立運算的程序,如Shell,Compiler管道-過濾器風(fēng)格將系統(tǒng)的功能邏輯建立為部件集合。每個部件實例完成一個對數(shù)據(jù)流的獨立功能處理,它接收數(shù)據(jù)流輸入,進(jìn)行轉(zhuǎn)換和增量后進(jìn)行數(shù)據(jù)流輸出。連接件是管道機(jī)制,它將前一個過濾器的數(shù)據(jù)流輸出傳遞給后一個過濾器作為數(shù)據(jù)流輸入。連接件也可能會進(jìn)行數(shù)據(jù)流的功能處理,進(jìn)行轉(zhuǎn)換或增量,但連接件進(jìn)行功能處理的目的為了適配前一個過濾器的輸出和后一個過濾器的輸入,而不是為了直接承載軟件系統(tǒng)的需求。管道-過濾器風(fēng)格最重要的設(shè)計決策與約束是保證過濾器的獨立性,即:每個過濾器都獨立工作,無需知道通過管道與其相連的其他過濾器的特征。也就是說,每個過濾器

21、只需要了解輸入數(shù)據(jù)流和保證輸出數(shù)據(jù)流即可,不用關(guān)心一起工作的其他過濾器的實現(xiàn)細(xì)節(jié)。過濾器之間不能共享任何狀態(tài),更不能共享數(shù)據(jù)。雖然在軟件體系結(jié)構(gòu)設(shè)計時需要對各過濾器的執(zhí)行順序進(jìn)行專門安排,但是整個過濾網(wǎng)絡(luò)的正確輸出不能依賴于各過濾器的執(zhí)行順序。也就是說,從系統(tǒng)設(shè)計的角度講,需要專門安排各過濾器的執(zhí)行順序,但是在實現(xiàn)單個過濾器時,不能將結(jié)果的正確性依賴于執(zhí)行順序上。各個過濾器可以并發(fā)執(zhí)行。每個過濾器都可以在數(shù)據(jù)輸入不完備的情況下就開始進(jìn)行處理,每次接到一部分?jǐn)?shù)據(jù)流輸入就處理和產(chǎn)生一部分輸出。這樣,整個的過濾器網(wǎng)絡(luò)就形成了一條流水線。管道-過濾器風(fēng)格的優(yōu)點有:可復(fù)用性。因為管道-過濾器風(fēng)格要求過濾

22、器具有獨立性,所以任何兩個過濾器都是互不直接影響的。只要輸入和輸出的數(shù)據(jù)流內(nèi)容符合要求,就可以通過建立相應(yīng)的管道將一個過濾器融入一個軟件系統(tǒng),所以管道-過濾器風(fēng)格具有很好的可復(fù)用性。內(nèi)部可修改性。只要不修改輸入和輸出的數(shù)據(jù)流,過濾器可以自由安排對內(nèi)部實現(xiàn)的修改,所以管道-過濾器風(fēng)格具有較好的可修改性??蓴U(kuò)展性。因為過濾器的正確執(zhí)行不依賴于前面與后面的過濾器,也不依賴于整個過濾器網(wǎng)絡(luò)的執(zhí)行順序,所以在整個過濾器網(wǎng)絡(luò)中,只要在某一環(huán)節(jié)添加一個新的過濾器,就能夠擴(kuò)展系統(tǒng)的功能,也就說管道-過濾器風(fēng)格有很好的可擴(kuò)展性。性能。管道-過濾器風(fēng)格使用了并發(fā)執(zhí)行的流水線機(jī)制,所以具有很好的性能。支持特定分析。

23、管道-過濾器風(fēng)格還支持某些特定的分析,例如吞吐量和死鎖檢測。管道-過濾器風(fēng)格的缺點有:弱控制性和弱交互性。管道-過濾器風(fēng)格的過濾器是獨立和并發(fā)執(zhí)行的,而且它們對數(shù)據(jù)流的處理采用了流水線的方式,所以各個過濾器是各自為政的,系統(tǒng)很難找到一種方式來不間斷控制全系統(tǒng)的數(shù)據(jù)處理情況,也很難提供一種能夠統(tǒng)攬全局持續(xù)變化的交互方式??臻g效率較差。因為過濾器之間不能共享數(shù)據(jù),所以即使使用同樣的數(shù)據(jù),每個過濾器也都要保留自己的數(shù)據(jù)副本,導(dǎo)致空間效率較差。性能浪費。管道的數(shù)據(jù)傳輸會耗費一定的性能,尤其是如果管道需要在傳遞數(shù)據(jù)的同時對其進(jìn)行轉(zhuǎn)換與處理,那么額外的性能浪費就更加嚴(yán)重。錯誤處理能力較弱。因為過濾器之間相

24、對獨立,所以,如果一個過濾器發(fā)生了錯誤,那么其他的過濾器并不能及時感知并糾正錯誤。即使發(fā)生錯誤的過濾器及時發(fā)出了警報,也會有部分已經(jīng)發(fā)生了錯誤的數(shù)據(jù)會傳遞出去,只有重啟整個過濾器網(wǎng)絡(luò)才能完全恢復(fù)對所有數(shù)據(jù)的正常處理。所以,如果軟件系統(tǒng)不能容忍任何錯誤,或者不允許重新啟動,那么錯誤能力較弱的問題就會成為管道-過濾器風(fēng)格的致命缺點Buschmann2002。存儲庫風(fēng)格存儲庫風(fēng)格將系統(tǒng)的功能處理建立為一系列的知識源部件,它們收集和處理系統(tǒng)的數(shù)據(jù)信息,完成系統(tǒng)的功能任務(wù)。存儲庫風(fēng)格還建立了一個共享數(shù)據(jù)部件,它儲存系統(tǒng)所有的數(shù)據(jù)信息,代表了系統(tǒng)的狀態(tài)。知識源部件并不儲存數(shù)據(jù),所以在它們進(jìn)行數(shù)據(jù)收集與處理

25、時,需要訪問共享數(shù)據(jù)區(qū),這是通過直接進(jìn)行存儲區(qū)訪問實現(xiàn)的,存儲庫風(fēng)格將對存儲區(qū)的直接訪問建立為連接件。存儲庫風(fēng)格的重要設(shè)計決策與約束有:所有的知識源相互獨立,它們彼此不互相調(diào)用,它們的活動也沒有預(yù)先確定順序。所有的知識源都依賴于共享數(shù)據(jù),不僅它們處理的數(shù)據(jù)來自于共享數(shù)據(jù),而且它們的執(zhí)行流程和順序也要取決于共享數(shù)據(jù)的狀態(tài)。知識源負(fù)責(zé)實時檢查共享數(shù)據(jù)的狀態(tài),并在必要時做出合理的反應(yīng)。存儲庫風(fēng)格的優(yōu)點有:空間效率。因為所有的知識源交互都需要經(jīng)過共享數(shù)據(jù)來傳遞,所以存儲庫風(fēng)格要求共享系統(tǒng)的全部重要數(shù)據(jù)信息,這無疑使得它具有很好的空間效率。性能。在進(jìn)程實現(xiàn)時,存儲庫風(fēng)格允許多進(jìn)程并發(fā),所以它具有潛在的性

26、能優(yōu)勢。知識源的可修改性。存儲庫風(fēng)格要求各個知識源是相互獨立的,只需要依賴于共享數(shù)據(jù)。因此,只要不影響共享數(shù)據(jù),各個知識源可以很容易地進(jìn)行修改,具有較好的可修改性。容錯性和健壯性。存儲庫風(fēng)格將全局的數(shù)據(jù)都存儲在一起,這使得它可以集中精力保障系統(tǒng)的容錯性和健壯性,例如建立共享數(shù)據(jù)的備份、控制共享數(shù)據(jù)的安全、控制共享數(shù)據(jù)的并發(fā)等。而且,與擁有部分?jǐn)?shù)據(jù)相比,擁有所有的數(shù)據(jù)能夠更準(zhǔn)確地判斷模糊與不確定問題,這也能提高系統(tǒng)的容錯性和健壯性。存儲庫風(fēng)格的缺點有:共享數(shù)據(jù)的難修改性。因為所有的知識源都要依賴于共享數(shù)據(jù),所以共享數(shù)據(jù)一經(jīng)建立,就難以修改,其維護(hù)的代價非常高昂。共享數(shù)據(jù)的瓶頸性。共享數(shù)據(jù)在存儲庫

27、風(fēng)格中起著舉足輕重的作用,如果共享數(shù)據(jù)發(fā)生了性能低下、數(shù)據(jù)丟失、安全隱患等問題,那么整個系統(tǒng)都將受到影響。弱控制性。存儲庫風(fēng)格用共享數(shù)據(jù)實現(xiàn)交互的方式非常類似于公共耦合,知識源之間的影響范圍會隱形擴(kuò)大,而且難以預(yù)期和不易察覺。知識源的行為還需要受到共享數(shù)據(jù)狀態(tài)的影響,這使得一些行為一旦執(zhí)行就很難再現(xiàn)和測試。所以,存儲庫風(fēng)格具有弱控制性。模型-視圖-控制風(fēng)格(MVC)結(jié)構(gòu):Components: Model: 維護(hù)領(lǐng)域模型,并通知View相關(guān)變化Controller:改變model狀態(tài),并選擇返回的視圖View:把信息顯示給用戶,并把用戶的操作發(fā)送給ControllerConnectors: 函

28、數(shù)調(diào)用,消息,事件,內(nèi)存讀取優(yōu)點:允許同一模型的多個視圖存在視圖可同步可插式視圖和控制器缺點:增加的復(fù)雜度視圖中數(shù)據(jù)訪問的低效不和當(dāng)前流行的UI工具兼容使用情景:界面在運行時可以被隨時更換,如Web程序模型-視圖-控制風(fēng)格以程序調(diào)用為連接件,將系統(tǒng)功能組織為模型、視圖和控制三種連接件。模型封裝了系統(tǒng)的數(shù)據(jù)和狀態(tài)信息,實現(xiàn)業(yè)務(wù)邏輯,對外提供數(shù)據(jù)服務(wù)和執(zhí)行業(yè)務(wù)邏輯。視圖封裝了用戶交互,提供業(yè)務(wù)展現(xiàn),接收用戶行為??刂品庋b了系統(tǒng)的控制邏輯,根據(jù)用戶行為調(diào)用需要執(zhí)行的業(yè)務(wù)邏輯和數(shù)據(jù)更新,并且根據(jù)執(zhí)行后的系統(tǒng)狀態(tài)決定后續(xù)的業(yè)務(wù)展現(xiàn)。模型-視圖-控制風(fēng)格的重要設(shè)計決策和約束有:模型、視圖、控制是分別是關(guān)于

29、業(yè)務(wù)邏輯、表現(xiàn)和控制的三種不同內(nèi)容抽象。如果視圖需要持續(xù)地顯示某個數(shù)據(jù)的狀態(tài),那么它首先需要在模型中注冊對該數(shù)據(jù)的興趣。如果該數(shù)據(jù)狀態(tài)發(fā)生了變更,模型會主動通知視圖,然后再由視圖查詢數(shù)據(jù)的更新情況。視圖只能使用模型的數(shù)據(jù)查詢服務(wù),只有控制部件可以調(diào)用可能修改模型狀態(tài)的程序。用戶行為雖然由視圖發(fā)起,但是必須轉(zhuǎn)交給控制部件處理。對接收到的用戶行為,控制部件可能會執(zhí)行兩種處理中的一種或兩種:調(diào)用模型的服務(wù),執(zhí)行業(yè)務(wù)邏輯;提供下一個業(yè)務(wù)展現(xiàn)。模型部件相對獨立,既不依賴于視圖,也不依賴于控制。雖然模型與視圖之間存在一個“通知變更”的連接,但該連接的交互協(xié)議是非常穩(wěn)定的,可以認(rèn)為是非常弱的依賴。模型-視圖

30、-控制風(fēng)格的優(yōu)點有:易開發(fā)性。模型、視圖、控制是分別是關(guān)于業(yè)務(wù)邏輯、表現(xiàn)和控制的三種不同內(nèi)容抽象,設(shè)計機(jī)制清晰,易于開發(fā)。視圖和控制的可修改性。模型封裝了系統(tǒng)的業(yè)務(wù)邏輯,所以是三種類型中最為復(fù)雜的系統(tǒng)部件。MVC中模型是相對獨立的,所以對視圖實現(xiàn)和控制實現(xiàn)的修改不會影響到模型實現(xiàn)。再考慮到業(yè)務(wù)邏輯通常比業(yè)務(wù)表現(xiàn)和控制邏輯更加穩(wěn)定,所以MVC具有一定的可修改性優(yōu)勢。適宜于網(wǎng)絡(luò)系統(tǒng)開發(fā)的特征。MVC不僅允許視圖和控制的可修改性,而且其對業(yè)務(wù)邏輯、表現(xiàn)和控制的分離使得一個模型可以同時建立并保持多個視圖,這非常適用于網(wǎng)絡(luò)系統(tǒng)開發(fā)。模型-視圖-控制風(fēng)格的缺點有:復(fù)雜性。MVC將用戶任務(wù)分解成了表現(xiàn)、控制

31、和模型三個部分,這增加了系統(tǒng)的復(fù)雜性,不利于理解任務(wù)實現(xiàn)。模型修改困難。視圖和控制都要依賴于模型,因此,模型難以修改。應(yīng)用:因為有適宜于網(wǎng)絡(luò)系統(tǒng)開發(fā)的特征,所以MVC風(fēng)格主要用于網(wǎng)絡(luò)系統(tǒng)的開發(fā)。客戶端/服務(wù)器風(fēng)格(CS):結(jié)構(gòu):Components: 客戶、服務(wù)器Connectors: 基于RPC的交互協(xié)議特點:服務(wù)器不知道客戶機(jī)的身份,反之不然舉例:File server, web server, ftp server, e-mail server分布式系統(tǒng)的一個實例組件是Clients和servers,servers不知道Clients的情況Clients 知道server的 identi

32、tyConnectors are RPC-based interaction protocols有不同風(fēng)格的client-server如: File server, web server, ftp server, e-mail server客戶端/服務(wù)器風(fēng)格將系統(tǒng)的功能進(jìn)行了劃分。劃分后的一部分功能被建立為服務(wù)器部件,它們通常有較高的資源要求。系統(tǒng)中另一部分功能被建立為客戶端部件,它們需要處理更多的用戶交互。網(wǎng)絡(luò)連接被建立為連接件,它將客戶端的請求發(fā)送到服務(wù)器,服務(wù)器提供服務(wù)滿足請求,網(wǎng)絡(luò)連接再將服務(wù)的結(jié)果返還回客戶端??蛻舳?服務(wù)器風(fēng)格的重要設(shè)計決策與約束有:服務(wù)器較為固定,每個客戶端都知道

33、服務(wù)器的標(biāo)識;客戶端可以動態(tài)增減,服務(wù)器不知道客戶端的標(biāo)識;各個客戶端之間相互獨立,它們都依賴于服務(wù)器??蛻舳?服務(wù)器風(fēng)格的優(yōu)點有:易開發(fā)。在網(wǎng)絡(luò)軟件系統(tǒng)中,網(wǎng)絡(luò)通信復(fù)雜度是開發(fā)的難點之一??蛻舳?服務(wù)器風(fēng)格限定了Server的標(biāo)識,這使得網(wǎng)絡(luò)通信功能的設(shè)計和開發(fā)變得容易。客戶端的動態(tài)性??蛻舳?服務(wù)器風(fēng)格中的客戶端可以隨時增減,能夠?qū)崿F(xiàn)客戶端的動態(tài)性,這非常符合實際應(yīng)用的特點??蛻舳?服務(wù)器風(fēng)格的缺點有:服務(wù)器難以調(diào)整。因為所有的客戶端都要知道服務(wù)器的標(biāo)識,都要依賴于服務(wù)器,所以服務(wù)器難以調(diào)整。服務(wù)器瓶頸。計算復(fù)雜性較高的服務(wù)通常都由服務(wù)器承載,這可能會造成服務(wù)器負(fù)載超重,成為瓶頸。不易更新

34、。因為客戶端和服務(wù)器端都有實現(xiàn),要部署相應(yīng)的程序代碼,所以,如果系統(tǒng)發(fā)生了修改,那么在更新程序部署時,就必須要更新所有的客戶端和服務(wù)器端,這個工作量還是比較繁雜的。黑板風(fēng)格結(jié)構(gòu):Components: 代表系統(tǒng)正確狀態(tài)的中心數(shù)據(jù)結(jié)構(gòu)一系列操作中心數(shù)據(jù)結(jié)構(gòu)的獨立組件監(jiān)視狀態(tài)改變并回應(yīng)的代理Connectors: 過程調(diào)用或內(nèi)存讀取特點:a. 所有的Agent相互獨立b. 每個agent強(qiáng)依賴于共享數(shù)據(jù)c. agent檢查數(shù)據(jù)狀態(tài)并采取反應(yīng)Blackboard(推模式),如Chat room,結(jié)構(gòu)復(fù)雜但客戶端易實現(xiàn)Repository (拉模式),如Web log,結(jié)構(gòu)簡單但客戶端復(fù)雜 前者使用“pull”模型,部件從repository中讀取數(shù)據(jù)或者向其寫數(shù)據(jù);如:網(wǎng)絡(luò)日志;易于實現(xiàn),但是clients會變得非常復(fù)雜而且必須輪詢數(shù)據(jù)后者使用“push”模型,部件登記數(shù)據(jù)預(yù)定,當(dāng)數(shù)據(jù)準(zhǔn)備好后,部件收到通知;如,聊天室;Client的編碼簡化了;但是需要復(fù)雜的Infrastru

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論