要為系統(tǒng)選擇或設(shè)計某一個體系結(jié)構(gòu)風(fēng)格炒俱,必須根據(jù) 特定項目的具體特點飒炎,進(jìn)行分析比較后再確定北救,體系結(jié)構(gòu)風(fēng)格的使用幾乎完全是特定的。
討論體系結(jié)構(gòu)風(fēng)格時要回答的問題是:
(1)設(shè)計詞匯表是什么?
(2)構(gòu)件和連接件的類型是什么?
(3)可容許的結(jié)構(gòu)模式是什么?
(4)基本的計算模型是什么?
(5)風(fēng)格的基本不變性是什么?
(6)其使用的常見例子是什么?
(7)使用此風(fēng)格的優(yōu)缺點是什么?
(8)其常見的特例是什么?
經(jīng)典架構(gòu)風(fēng)格
數(shù)據(jù)流風(fēng)格:批處理序列骡澈、管道與過濾器。
調(diào)用/返回風(fēng)格:主程序與子程序掷空、面向?qū)ο箫L(fēng)格肋殴、層次結(jié)構(gòu)。
獨立構(gòu)件風(fēng)格:進(jìn)程通訊坦弟、事件系統(tǒng)护锤。
虛擬機(jī)風(fēng)格:解釋器、基于規(guī)則的系統(tǒng)减拭。
倉庫風(fēng)格:數(shù)據(jù)庫系統(tǒng)蔽豺、超文本系統(tǒng)、黑板系統(tǒng)拧粪。
管道與過濾器
面向數(shù)據(jù)流修陡,按照一定的順序從前向后執(zhí)行。一個典型的管道與過濾器體系結(jié)構(gòu)的例子是以Unix shell 編寫的程序可霎。
優(yōu)點:
構(gòu)建高內(nèi)聚魄鸦,低耦合
功能可以通過簡單的行為合成實現(xiàn)
復(fù)用性高,維護(hù)和增強(qiáng)系統(tǒng)簡單癣朗。新的過濾器替換老的過濾器即可拾因。
缺點:
不適合交互式的應(yīng)用
數(shù)據(jù)傳輸上沒有通用的標(biāo)準(zhǔn),每個過濾器都增加了解析和合成數(shù)據(jù)的動作旷余,導(dǎo)致了系統(tǒng)性能的下降
img
數(shù)據(jù)抽象&面向?qū)ο?/h1>
建立在數(shù)據(jù)抽象和面向?qū)ο蟮幕A(chǔ)上绢记,數(shù)據(jù)的表示方法和它們的相應(yīng)操作封裝在一個抽象數(shù)據(jù)類型或?qū)ο笾小?/p>
這種風(fēng)格的構(gòu)件是對象,或者說是抽象數(shù)據(jù)類型的實例正卧。
優(yōu)點:
因為對象對其它對象隱藏了它的表示蠢熄,因此可以改變一個對象而不影響其它的對象
可將一些數(shù)據(jù)存取操作的問題,拆解為一些交互代理程序的集合炉旷。
缺點:
為了交互必須知道對象的標(biāo)識签孔,如果對象標(biāo)識改變了,必須修改其它調(diào)用它的對象窘行。
如果A使用了對象B饥追,C也使用了對象B,那么罐盔,C對B的使用所造成的對A的影響可能是料想不到的但绕。
image-20210604211234846
分層系統(tǒng)風(fēng)格
層次系統(tǒng)組織成一個層次結(jié)構(gòu),每一層為上層服務(wù)惶看,并作為下層客戶壁熄。在一些層次系統(tǒng)中帚豪,除 了一些精心挑選的輸出函數(shù)外,內(nèi)部的層只對相鄰的層可見草丧。
優(yōu)點:
支持抽象程度遞增的系統(tǒng)設(shè)計狸臣,使設(shè)計師可以把一個復(fù)雜系統(tǒng)按遞增的步驟進(jìn)行分 解。
支持重用昌执,只要提供的服務(wù)接口定義不變烛亦,同一層的不同實現(xiàn)可以交換使用。這樣懂拾,就可 以定義一組標(biāo)準(zhǔn)的接口煤禽,而允許各種不同的實現(xiàn)方法。
支持功能增強(qiáng)岖赋,因為每一層至多和相鄰的上下層交互檬果,因此功能的改變最多影響相鄰的上 下層。
不足:
并不是每個系統(tǒng)都可以很容易地劃分為分層的模式唐断,甚至即使一個系統(tǒng)的邏輯結(jié)構(gòu)是層次化的选脊,出于對系統(tǒng)性能的考慮,系統(tǒng)設(shè)計師不得不把一些低級或高級的功能綜合起來;
很難找到一個合適的脸甘、正確的層次抽象方法恳啥。
image-20210604212133566
倉庫系統(tǒng)風(fēng)格
有兩種不同的構(gòu)件:中央數(shù)據(jù)結(jié)構(gòu)說明當(dāng)前狀態(tài),獨立構(gòu)件在中央數(shù)據(jù)存貯上執(zhí)行丹诀,倉庫與外構(gòu)件間的相互作用在系統(tǒng)中會有大的變化钝的。
知識源(構(gòu)件) 不直接交互,相互獨立
黑板數(shù)據(jù)按照與應(yīng)用程序相關(guān)的層次來組織的解決問題的數(shù)據(jù)铆遭,知識源 通過不斷地改變黑板數(shù)據(jù)來解決問題硝桩。
控制∶度伲控制完全由黑板的狀態(tài)驅(qū)動亿柑,黑板狀態(tài)的改變決定使用的特定知識。
image-20210604090748076
詳細(xì)內(nèi)容查看《軟件體系結(jié)構(gòu)原理棍弄、方法與實踐》
Get
現(xiàn)在畫架構(gòu)圖總是想著分層要清晰,組件功能要能抽象出來疟游,看了一些基本的架構(gòu)風(fēng)格之后呼畸,其實架構(gòu)設(shè)計未必一定要分層,分層只是經(jīng)典的風(fēng)格之一颁虐,還有基于數(shù)據(jù)的蛮原,互相獨立的組件風(fēng)格可以使用。
參考:
1人點贊
作者:Real_man
鏈接:http://www.reibang.com/p/a6dd0cee6874
來源:簡書
著作權(quán)歸作者所有另绩。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)儒陨,非商業(yè)轉(zhuǎn)載請注明出處花嘶。