軟件體系結(jié)構(gòu)風(fēng)格之一

1. 管道和過濾器風(fēng)格

【數(shù)據(jù)流風(fēng)格,因為管道里都是數(shù)據(jù)流】


(1)構(gòu)件:過濾器。它對輸入流進行處理、轉(zhuǎn)換。處理后的結(jié)果在輸出端流出。

【過濾器之間是相互獨立的,無需進行狀態(tài)信息的交互(主要特點)。每個過濾器都有輸入輸出,過程是:輸入流->進行處理->輸出流】

(2)連接件:管道。位于過濾器之間,起到信息流的導(dǎo)管作用。

(3)優(yōu)點:

a. 使得軟構(gòu)件具有良好的隱蔽性和高內(nèi)聚、低耦合的特點,系統(tǒng)中已有的過濾器很容易用于新的待設(shè)計系統(tǒng)。

【隱蔽性:構(gòu)件本身是封裝好的實體 ? ? ? ? ? ? ?高內(nèi)聚、低耦合:因為構(gòu)件彼此之間是獨立的】

b. 允許設(shè)計者將整個系統(tǒng)的輸入/輸出行為看成是多個過濾器的行為的簡單合成

【便于劃分功能】

c. 支持軟件重用。

【只需要控制過濾器的輸入流,就可以將兩個過濾器連接起來】

d. 具有較強的可維護性和可擴展性。

【可維護性:更新和升級--增加、修改過濾器,只需要考慮涉及到的過濾器,其他不相關(guān)的不受影響】

【可擴展性:添加新的功能,只需要在原有基礎(chǔ)上添加新的端口】

e. 支持并行執(zhí)行。

【構(gòu)件之間相互獨立,所以可以并行執(zhí)行】

f. 為系統(tǒng)的性能分析提供了方便。

【吞吐量、死鎖、計算機正確性等屬性】

(4)缺點:

a. 通常導(dǎo)致進程成為批處理的結(jié)構(gòu)。

【過濾器是對輸入的批量轉(zhuǎn)換處理,對輸入和輸出有相應(yīng)的說明限制】

b. 不適合交互應(yīng)用要求高的情況

【過濾器對輸入流有著嚴格的限制】

c. 因為在數(shù)據(jù)傳輸上沒有通用的標準,每個過濾器都增加了解析和合成數(shù)據(jù)的工作,這樣就導(dǎo)致了系統(tǒng)性能下降,并增加了編寫過濾器的復(fù)雜性。

(5)例子:

Unix的Shell程序

Cat?file | grep xyz | sort |uniq>out

系統(tǒng)先在文件中查找含有xyz的行,排序,然后去掉相同的行,最后結(jié)果放到out中

2.?面向?qū)ο蟮捏w系結(jié)構(gòu)風(fēng)格

【這是一種調(diào)用/返回風(fēng)格】


(1)構(gòu)件:對象,或者說是抽象數(shù)據(jù)類型的實例。

? ? ? ? 連接件:通過函數(shù)和過程的調(diào)用。

(2)優(yōu)點:

a. 信息隱藏保證了對象行為的可靠性。

【用戶只能通過函數(shù)調(diào)用來影響一個對象,避免了訪問的隨意性】

b. 受封裝的獨立運行對象把數(shù)據(jù)和操作捆綁在一起,提高了對象作為一種模塊的內(nèi)聚力,使系統(tǒng)分解成相互作用又相對獨立的對象集合。

c. 對象方法的調(diào)用將操作請求和實現(xiàn)細節(jié)實現(xiàn)分離,使得可能在不影響使用者的情況下改變操作的實現(xiàn),為系統(tǒng)的維護升級提供了便利的條件。

d. 對象可以是多線程的,也可以是單線程的

【對象之間通過函數(shù)和過程的調(diào)用相互影響】

(3)缺點:

a. 為了使一個對象和另一個對象通過過程調(diào)用等進行交互,必須知道對象的標識。

【如果一個對象標識改了,所有地方都要改】

b. 不同對象的操作關(guān)聯(lián)性弱。

【如果兩個對象同時訪問另一個對象,彼此之間可能會互相影響】

c. 采用面向?qū)ο螅纸獬龅氖切×6鹊幕绢惢驅(qū)ο蟆南到y(tǒng)總體結(jié)構(gòu)到構(gòu)件的設(shè)計,缺乏有效的描述和設(shè)計方法。

【就是一開始做體系結(jié)構(gòu)設(shè)計,分解出的構(gòu)件很難做到對象這么精準】

3. 基于事件的風(fēng)格

【這是一種獨立構(gòu)件風(fēng)格,構(gòu)件之間彼此都不知道】

(1)構(gòu)件:一些模塊,模塊既可以是一些過程,又可以是一些事件的集合。

(2)構(gòu)件不直接調(diào)用一個過程,而是觸發(fā)或廣播一個或多個事件。系統(tǒng)中的其它構(gòu)件中的過程在一個或多個事件中注冊,當(dāng)一個事件被觸發(fā),系統(tǒng)自動調(diào)用在這個事件中注冊的所有過程。

【構(gòu)件觸發(fā)或者廣播事件->調(diào)用在這個事件中注冊的所有過程(包括一些構(gòu)件)】

(3)過程可以用通用的方式調(diào)用,也可以在系統(tǒng)事件中注冊一些過程,當(dāng)發(fā)生這些事件時,過程被調(diào)用。

(4)特點:?這種風(fēng)格的主要特點是事件的觸發(fā)者并不知道哪些構(gòu)件會被這些事件影響。這樣不能假定構(gòu)件的處理順序,甚至不知道哪些過程會被調(diào)用。

【這里說的是隱式調(diào)用】

(5)優(yōu)點:

a. 為軟件重用提供了強大的支持。當(dāng)需要將一個構(gòu)件加入現(xiàn)存系統(tǒng)中時,只需將它注冊到系統(tǒng)的事件中。

b. 為改進系統(tǒng)帶來了方便。當(dāng)用一個構(gòu)件代替另一個構(gòu)件時,不會影響到其它構(gòu)件的接口。

【構(gòu)件之間相互獨立】

c. 事件廣播者不必知道哪些部件將會被調(diào)用,部件之間的關(guān)系將弱化。

【降低了構(gòu)件之間的耦合性】

(6)缺點:

a. 構(gòu)件放棄了對系統(tǒng)計算的控制。

【構(gòu)件只知道自己需要調(diào)用的事件,不知道涉及的其他構(gòu)件和它們的順序】

b. 數(shù)據(jù)交換的問題。有時數(shù)據(jù)可被一個事件傳遞,但另一些情況下,基于事件的系統(tǒng)必須依靠一個共享的倉庫進行交互。

c. 很難對系統(tǒng)正確性進行推理。

【Debug有問題】

(7)例子:

在某系統(tǒng)中,編輯器和變量監(jiān)視器可以登記相應(yīng)Debugger的斷點事件。當(dāng)Debugger在斷點處停下來時,它聲明該事件,由系統(tǒng)自動調(diào)用處理程序。

【Debugger本身只聲明事件,并不關(guān)心哪些過程會啟動,也不關(guān)心這些過程做什么處理。】

4. 分層的體系結(jié)構(gòu)風(fēng)格

【這是一種調(diào)用/返回風(fēng)格】


(1)連接件:通過決定層間如何交互的協(xié)議來定義。

? ? ? ? 拓撲約束:包括對相鄰層間交互的約束。

(2)分層風(fēng)格有助于將任務(wù)分解成多個子任務(wù)組,其中每個子任務(wù)組處于某個特定的抽象層次上。

(3)層次系統(tǒng)組織成一個層次結(jié)構(gòu),每一層為上層服務(wù),并作為下層客戶。最上層只調(diào)用下層提供的函數(shù)功能,最底層只負責(zé)為直接相鄰的上層提供服務(wù)。

(4)在一些層次系統(tǒng)中,除了一些精心挑選的輸出函數(shù)外,內(nèi)部的層只對相鄰的層可見。

【由于每一層最多只影響兩層,同時只要給相鄰層提供相同的接口,允許每層用不同的方法實現(xiàn),這為軟件重用提供了強大的支持。】

(5)這種風(fēng)格支持基于可增加抽象層的設(shè)計。允許將一個復(fù)雜問題分解成一個增量步驟序列的實現(xiàn)。

【就是對問題可以橫向分解和縱向分解結(jié)合】

(6)優(yōu)點:

a. 支持基于抽象程度遞增的系統(tǒng)設(shè)計

【就是可以由簡單到復(fù)雜】

b. 支持功能增強

【因為每一層基本只影響相鄰兩層,所以對功能的修改最多影響相鄰兩層】

c. 支持重用。

【層與層之間通過服務(wù)接口進行交互,所以只要接口不變,層就可以重用】

(7)缺點:

a. 并不是每個系統(tǒng)都可以很容易地劃分為分層的模式,有時候為了性能考慮,要把一些綜合起來。

b. 效率低下。

【上面的層過分依賴下面的層提供服務(wù),相關(guān)數(shù)據(jù)傳達的時間長】

c. 缺少公認合適的、正確的層次抽象方法。

【層次太少,分層不能完全發(fā)揮這種風(fēng)格的可重用性、可更改性和可移植性上的潛力。層次太少,會引入不必要的復(fù)雜性和層間隔離冗余以及層間傳輸?shù)拈_銷。】

5. 倉庫風(fēng)格

(1)構(gòu)件:中央數(shù)據(jù)結(jié)構(gòu)說明當(dāng)前狀態(tài),獨立構(gòu)件在中央數(shù)據(jù)存貯上執(zhí)行。

(2)控制原則的選取產(chǎn)生兩個主要的子類。

? ? ? ? 若輸入流中某類時間觸發(fā)進程執(zhí)行的選擇,則倉庫是一傳統(tǒng)型數(shù)據(jù)庫;

? ? ? ? 若中央數(shù)據(jù)結(jié)構(gòu)的當(dāng)前狀態(tài)觸發(fā)進程執(zhí)行的選擇,則倉庫是一黑板系統(tǒng)。

6. 黑板系統(tǒng)

【是一種倉庫風(fēng)格】


(1)組成元素:

知識源:包含獨立的、與應(yīng)用程序相關(guān)的知識。

黑板數(shù)據(jù):是按照與應(yīng)用程序相關(guān)的層次來組織的解決問題的數(shù)據(jù)。知識源通過不斷的改變黑板數(shù)據(jù)來解決問題。

黑板:保存著系統(tǒng)的輸入、問題求解各個階段的中間結(jié)果和反映整個問題的求解狀態(tài)。

【知識之間不直接通信,它們之間的交互通過黑板完成】

控制:完全由黑板的狀態(tài)驅(qū)動,黑板狀態(tài)的改變決定使用的特定知識。

(2)應(yīng)用:傳統(tǒng)應(yīng)用是信號處理領(lǐng)域,如語音和模式識別,另一應(yīng)用是松耦合代理數(shù)據(jù)共享存取?。

7. C2(Component and Connector)風(fēng)格


(1)C2風(fēng)格是一種基于構(gòu)件和消息的體系結(jié)構(gòu)風(fēng)格,用于構(gòu)件靈活的、可擴展的軟件系統(tǒng)。C2對具有圖形用戶界面的應(yīng)用有良好的支持。

(2)C2風(fēng)格的體系結(jié)構(gòu)是一個層次網(wǎng)絡(luò),這個網(wǎng)絡(luò)由相互協(xié)作的構(gòu)件和負責(zé)將它們鏈接在一起的連接件按照一套風(fēng)格規(guī)則組成。

【也可以理解為通過連接件綁定在一起的按照一組規(guī)則運作的并行構(gòu)件網(wǎng)絡(luò)。】

(3)系統(tǒng)中的構(gòu)件和連接件都有一個頂部和一個底部。

(4)構(gòu)件與構(gòu)件之間的直接連接是不允許的,連接件和連接件之間可以直接連接。

(5)中心原則:有限可視原則,或者說是與下層獨立的原則。

【某一構(gòu)件只能感知層次高于自己的構(gòu)件所提供的服務(wù),而不能感知到層次比自己更低的構(gòu)件的服務(wù)】

(6)通信規(guī)則:所有構(gòu)件之間的通訊是通過以連接件為中介的異步消息交換機制來實現(xiàn)的;消息是構(gòu)件之間唯一通信途徑。

【以連接件為中介:構(gòu)件之間不能直接通訊】

(7)特點:

a. 基于構(gòu)件的風(fēng)格。

b. 可擴展性。

c. 適應(yīng)性

【可同時有多個用戶進行交互】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內(nèi)容

  • 體系結(jié)構(gòu) = 組件 + 連接件 + 約束 軟件體系結(jié)構(gòu)的核心概念: 構(gòu)/組件 軟件重用 構(gòu)件: 語義完整、語法正確...
    pianosecret閱讀 2,835評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,828評論 18 139
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,074評論 6 13
  • 體系風(fēng)格 如武林門派各有異長之處,其所長即是風(fēng)格體現(xiàn)。對于軟件體系來說"每一套體系風(fēng)格里裝載著獨特的結(jié)構(gòu)、語義特性...
    噠噠luada閱讀 982評論 0 1
  • 且讓我分擔(dān)你的憂愁(一) 20160925 今天早飯后,是君子蘭班的晨誦時間,本來早上起床后有20分鐘時間挺好的,...
    河南麥子的書寫閱讀 712評論 0 1