日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转载】实现软件架构质量属性的战术

發(fā)布時(shí)間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转载】实现软件架构质量属性的战术 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文地址:http://www.uml.org.cn/zjjs/201309043.asp

架構(gòu)設(shè)計(jì)則為滿足架構(gòu)需求的質(zhì)量屬性尋找適當(dāng)?shù)膽?zhàn)術(shù)。對(duì)如何實(shí)現(xiàn)特定的質(zhì)量屬性感興趣。質(zhì)量需求指定了軟件的響應(yīng),以實(shí)現(xiàn)業(yè)務(wù)目標(biāo)。我們感興趣的是設(shè)計(jì)使用設(shè)計(jì)模式、架構(gòu)模式或架構(gòu)策略創(chuàng)建設(shè)計(jì)的“戰(zhàn)術(shù)”。

是什么使一個(gè)設(shè)計(jì)具有了可移植性,一個(gè)設(shè)計(jì)具有了高性能,而另一個(gè)設(shè)計(jì)具備了可集成性?實(shí)現(xiàn)這些質(zhì)量屬性依賴于基本的設(shè)計(jì)策略。我們將對(duì)這些稱之為“戰(zhàn)術(shù)”的設(shè)計(jì)決策進(jìn)行分析。戰(zhàn)術(shù)就是影響質(zhì)量屬性響應(yīng)控制的設(shè)計(jì)決策。戰(zhàn)術(shù)集合稱為“架構(gòu)策略”。架構(gòu)模式以某種方式將戰(zhàn)術(shù)打包在一起。

系統(tǒng)設(shè)計(jì)是由決策集合組成。對(duì)設(shè)計(jì)師來說,每個(gè)戰(zhàn)術(shù)都是一個(gè)設(shè)計(jì)選擇。例如,其中一個(gè)戰(zhàn)術(shù)引入了冗余,以提高系統(tǒng)的可用性。這是提高可用性的一個(gè)選擇但是不是唯一選擇。

我們將每個(gè)系統(tǒng)質(zhì)量屬性的戰(zhàn)術(shù)組織為層次形式,但是每個(gè)層次只是為了說明一些戰(zhàn)術(shù),而且任何戰(zhàn)術(shù)列表都肯定是不完成的。

1. 可用性戰(zhàn)術(shù)

恢復(fù)和修復(fù)是可用性的重要方面,為了阻止錯(cuò)誤發(fā)展成故障,至少能夠把錯(cuò)誤限制在一定的范圍內(nèi),從而使修復(fù)成為可能。維持可用性的所有方法包括某種類型的冗余,用來檢測(cè)故障的某種類型的健康監(jiān)視,以及當(dāng)檢測(cè)到故障時(shí)某種類型的恢復(fù)。有些情況下,監(jiān)視或恢復(fù)是自動(dòng)進(jìn)行的,有時(shí)需要手動(dòng)。

我們事項(xiàng)考慮錯(cuò)誤檢測(cè),然后分析錯(cuò)誤恢復(fù),最后討論錯(cuò)誤預(yù)防。

1> 錯(cuò)誤檢測(cè)

用于識(shí)別錯(cuò)誤的3個(gè)戰(zhàn)術(shù)是命令/響應(yīng)、心跳和異常

⑴命令/響應(yīng)。一個(gè)組件發(fā)出一個(gè)命令,并希望在預(yù)定義的時(shí)間內(nèi)收到一個(gè)來自審查組件的響應(yīng)。可以把該戰(zhàn)術(shù)用在共同負(fù)責(zé)某項(xiàng)任務(wù)的一組組件內(nèi)。客戶機(jī)也可以使用這種戰(zhàn)術(shù),以確保服務(wù)器對(duì)象和到服務(wù)器的通信路徑在期望的性能邊界內(nèi)操作。可以用一種層級(jí)形式組織“命令/響應(yīng)”錯(cuò)誤探測(cè)器,其中最底層的探測(cè)器對(duì)與其共享一個(gè)處理器的軟件進(jìn)程發(fā)出命令,較高層的錯(cuò)誤探測(cè)器對(duì)較低層的探測(cè)器發(fā)出命令。與所有進(jìn)程發(fā)出命令的遠(yuǎn)程錯(cuò)誤探測(cè)器相比,這種戰(zhàn)術(shù)所使用的通信帶寬更少。

⑵心跳。一個(gè)組件定期發(fā)出一個(gè)心跳消息,另一個(gè)組件接收聽該信息。如果心跳失敗,則假定最初的組件失敗,并通知錯(cuò)誤糾正組件。心跳還可以傳遞數(shù)據(jù)。例如,自動(dòng)柜員機(jī)定期向服務(wù)器發(fā)送一次交易日志。該消息不僅起到心跳的作用,而且傳送了要處理的數(shù)據(jù)。

⑶異常。識(shí)別錯(cuò)誤的一個(gè)方法就是遇到了異常。

命令/響應(yīng)和心跳戰(zhàn)術(shù)在不同的進(jìn)程中操作,異常戰(zhàn)術(shù)在一個(gè)進(jìn)程中操作。異常處理程序通常將錯(cuò)誤在語義上轉(zhuǎn)換為可以被處理的形式。

2> 錯(cuò)誤恢復(fù)

錯(cuò)誤恢復(fù)由準(zhǔn)備恢復(fù)和修復(fù)系統(tǒng)兩部分組成。

⑴表決。運(yùn)行在冗余處理器上的每個(gè)進(jìn)程都具有相同的輸入,它們計(jì)算發(fā)送給表決者的一個(gè)簡(jiǎn)單的輸出值。如果表決者檢測(cè)到單處理器的異常行為,那么就中止這一行為。表決算法可以是“多數(shù)規(guī)則”或“首選組件“或其他算法。該方法用于糾正算法的錯(cuò)誤操作或者處理器的故障,通常用在控制系統(tǒng)。每個(gè)冗余組件的軟件可以由不同的小組開發(fā),并且在不同平臺(tái)上執(zhí)行。稍微好一點(diǎn)情況是在不同平臺(tái)上開發(fā)一個(gè)軟件組件,但是這樣的開發(fā)和維護(hù)費(fèi)用非常昂貴。

⑵主動(dòng)冗余(熱重啟)。所有的冗余組件都以并行的方式對(duì)事件做出響應(yīng)。因此他們都處在相同的狀態(tài)。僅使用一個(gè)組件的響應(yīng),丟棄其他組件的響應(yīng)。錯(cuò)誤發(fā)生時(shí),使用該戰(zhàn)術(shù)的系統(tǒng)停機(jī)時(shí)間通常是幾毫秒,因?yàn)閭浞菔亲钚碌?#xff0c;所以恢復(fù)所需要的時(shí)間就是切換時(shí)間。

⑶被動(dòng)冗余(暖重啟/雙冗余/三冗余)

一個(gè)組件(主要的)對(duì)事件做出響應(yīng),并通知其他組件(備用的)必須進(jìn)行狀態(tài)更新。當(dāng)錯(cuò)誤發(fā)生時(shí),在繼續(xù)提供服務(wù)前,系統(tǒng)必須首先確保備用狀態(tài)是最新的。該方法也用在控制系統(tǒng)中,通常情況是在輸入信息通過通信通道或傳感器到來時(shí),如果出現(xiàn)故障必須從主組件切換到備用組件時(shí)使用。

⑷備件

備用件是計(jì)算平臺(tái)配置用于更換各種不同的故障組件。出現(xiàn)故障時(shí),必須將其重新啟動(dòng)為適當(dāng)?shù)能浖渲?#xff0c;并對(duì)其狀態(tài)進(jìn)行初始化。定期設(shè)置持久設(shè)備的系統(tǒng)狀態(tài)的檢查點(diǎn),并記錄持久設(shè)備的所有狀態(tài)變化能夠使備件設(shè)置為適當(dāng)?shù)臓顟B(tài)。這通常用作備用客戶機(jī)工作站,出現(xiàn)故障時(shí),用戶可以離開。該戰(zhàn)術(shù)的停機(jī)時(shí)間通常是幾分鐘。

⑸Shadow操作。以前出現(xiàn)故障的組件可以在短時(shí)間內(nèi)以“shadow模式”運(yùn)行,以確保在恢復(fù)該組件前,模仿工作組件行為。

⑹狀態(tài)再同步。主動(dòng)和被動(dòng)冗余戰(zhàn)術(shù)要求恢復(fù)的組件在重新提供服務(wù)前更新其狀態(tài)。更新的方法取決于可以承受的停機(jī)時(shí)間、更新的規(guī)模以及更新所要求的消息的數(shù)量。

⑺檢查點(diǎn)/回滾。檢查點(diǎn)就是記錄所創(chuàng)建的一致狀態(tài),或者是定期進(jìn)行,或者是對(duì)具體事件做出響應(yīng)。有時(shí)系統(tǒng)會(huì)以一種不同尋常的方式出現(xiàn)故障,可檢測(cè)到其狀態(tài)不一致。在這種情況下,應(yīng)該使用上一個(gè)一致狀態(tài)檢查點(diǎn)和拍了快照后所發(fā)生的事務(wù)日志來恢復(fù)系統(tǒng)。

3> 錯(cuò)誤預(yù)防

⑴從服務(wù)中刪除。該戰(zhàn)術(shù)從操作中刪除了系統(tǒng)的一個(gè)組件,以執(zhí)行某些活動(dòng)來防止預(yù)期發(fā)生的故障。一個(gè)示例就是重新啟動(dòng)組件,以防止內(nèi)存泄露導(dǎo)致故障的發(fā)生。如果從服務(wù)中刪除是自動(dòng)的,則可以設(shè)計(jì)架構(gòu)策略來支持它。如果是人工進(jìn)行的,則必須對(duì)系統(tǒng)進(jìn)行設(shè)計(jì)以對(duì)其提供支持。

⑵事務(wù)。事務(wù)就是綁定幾個(gè)有序的步驟,以能夠立刻撤銷整個(gè)綁定。如果進(jìn)程中的一個(gè)步驟失敗的話,可以使用事務(wù)來防止任何數(shù)據(jù)受到影響,還可以使用事務(wù)來防止訪問相同數(shù)據(jù)的幾個(gè)同時(shí)線程之間發(fā)生沖突。
⑶進(jìn)程監(jiān)視器。一旦檢測(cè)到進(jìn)程中存在著錯(cuò)誤,監(jiān)視進(jìn)程就可以刪除非執(zhí)行進(jìn)行,并為該進(jìn)程創(chuàng)建一個(gè)新的實(shí)例,就像在備件戰(zhàn)術(shù)中一樣,初始化為某個(gè)適當(dāng)?shù)臓顟B(tài)。

總結(jié)了上面討論的戰(zhàn)術(shù)。

2. 可修改性戰(zhàn)術(shù)

可修改戰(zhàn)術(shù)的目標(biāo)是控制實(shí)現(xiàn)、測(cè)試和部署變更的時(shí)間和成本。把可修改性戰(zhàn)術(shù)根據(jù)其目標(biāo)進(jìn)行分組。一組可修改性戰(zhàn)術(shù)目標(biāo)是減少由某個(gè)變更直接影響的數(shù)量。這組稱為“局部化修改”。另一組可修改戰(zhàn)術(shù)的目標(biāo)是限制對(duì)局部化的模塊的修改。這組稱為“防止連鎖反應(yīng)”。兩組之間的差別是有直接受變更影響的模塊(那些調(diào)整其責(zé)任來完成變更的模塊)間接受變更影響的模塊(那些責(zé)任保持不變,但必須改變其實(shí)現(xiàn)來適應(yīng)直接受影響的模塊)。第三組戰(zhàn)術(shù)的目標(biāo)是控制部署時(shí)間和成本。我們把這組戰(zhàn)術(shù)叫做“延遲綁定時(shí)間”。

1> 局部化修改。

目標(biāo)是在設(shè)計(jì)期間為模塊分配責(zé)任,以把預(yù)期的變更限制在一定范圍內(nèi)。其戰(zhàn)術(shù)有:維持語義的一致性、預(yù)期期望的變更、泛化該模塊、限制可能的選擇。

⑴維持語義的一致性。語義的一致性是在模塊中責(zé)任之間的關(guān)系。目標(biāo)是確保所有這些責(zé)任都能夠協(xié)同工作,不需要過多地依賴其他模塊。該目標(biāo)是通過選擇具有語義一致性的責(zé)任來實(shí)現(xiàn)的。耦合和內(nèi)聚指標(biāo)是度量語義一致性的嘗試,但它們遺漏了變更的上下文。相反根據(jù)一組預(yù)期的變更來度量語義一致性。其中一個(gè)子戰(zhàn)術(shù)就是“抽象通用服務(wù)”。通過專門的模塊提供通用服務(wù)通常被視為支持重用。但是抽象通用服務(wù)也支持可修改性。如果已經(jīng)抽象出了通用服務(wù),那么對(duì)這些通用服務(wù)的修改只需要進(jìn)行一次,而不需要在使用這些服務(wù)的每個(gè)模塊中都進(jìn)行修改。此外,對(duì)使用這些服務(wù)的模塊的修改不會(huì)影響到其他用戶。不僅支持局部化修改,而且還能夠防止連鎖反應(yīng)。抽象通用服務(wù)的示例就是應(yīng)用框架的使用和其他中間件軟件的使用。

⑵預(yù)期期望的變更。考慮所預(yù)想的變更的集合提供了一個(gè)評(píng)估特定的責(zé)任分配的方法。基本的問題是“對(duì)于每次變更,所建議的分解是否限定了為完成變更所需要修改的模塊的集合?”一個(gè)相關(guān)的問題是“根本不同的變更會(huì)影響相同模塊嗎?”這與語義一致性有什么不同呢?根據(jù)語義一致性分配責(zé)任,假定期望的變更在語義上是一致的。預(yù)測(cè)期望變更的戰(zhàn)術(shù)不關(guān)心模塊責(zé)任的一致性,它所關(guān)心的是使變更的影響最小。在實(shí)際中很難單獨(dú)使用該戰(zhàn)術(shù),因?yàn)椴豢赡茴A(yù)期所有變更。基于此原因,我們通常結(jié)合語義一致性來使用該戰(zhàn)術(shù)。

⑶泛化該模塊。使一個(gè)模塊更通用能夠使它根據(jù)輸入計(jì)算更廣泛的功能。可以該輸入看作是為該模塊定義了一種語言,這可能會(huì)如同使常數(shù)成為輸入?yún)?shù)一樣簡(jiǎn)單;也可能如同把該模塊實(shí)現(xiàn)為解釋程序,并使輸入?yún)?shù)成為解釋程序的語言中的程序一樣復(fù)雜。模塊越通用,越有可能通過調(diào)整語言而非修改模塊來進(jìn)行請(qǐng)求變更。

⑷限制可能的選擇。修改(尤其是在產(chǎn)品線中的修改)的范圍可能非常大,因此可能會(huì)影響很多模塊。限制可能的選擇將會(huì)降低這些修改所造成的影響。例如,產(chǎn)品線的某個(gè)變化點(diǎn)可能允許處理器的變化。將處理器變更限制為相同家族的成員就限制了可能的選擇。

2> 防止連鎖反應(yīng)。

修改所產(chǎn)生的一個(gè)連鎖反應(yīng)就是需要改變?cè)撔薷牟]有直接影響到的模塊。例如,改變了模塊A以完成某個(gè)特定的修改,那么必須改變模塊B,這僅僅是因?yàn)楦淖兞薃,在某種意義上來說,是因?yàn)樗蕾囉谀KA。
確定的8中類型的依賴。

① 語法。

1.數(shù)據(jù)。要使B正確編譯或執(zhí)行,由A產(chǎn)生并由B使用的數(shù)據(jù)類型或格式必須與B所假定的數(shù)據(jù)的類型或格式一致。

2.服務(wù)。要使B正確編譯和執(zhí)行,由A提供并且由B調(diào)用的服務(wù)的簽名必須與B的假定一致。

② 語義。

1.數(shù)據(jù)。要使B正確執(zhí)行,由A產(chǎn)生并由B使用的數(shù)據(jù)語義必須與B所假定的數(shù)據(jù)的語義一致。

2.服務(wù)。要使B正確執(zhí)行,由A提供并且由B調(diào)用的服務(wù)的語義必須與B的假定一致。

③ 順序。

1.數(shù)據(jù)。要使B正確執(zhí)行,它必須以一個(gè)固定的順序接收由A產(chǎn)生的數(shù)據(jù)。

2.控制。要使B正確執(zhí)行,A必須在一定的時(shí)間限制內(nèi)執(zhí)行。

④ A的一個(gè)接口身份。A可以有多個(gè)接口。要使B正確編譯和執(zhí)行,該接口的身份(名稱或句柄)必須與B的假定一致。

⑤ A的位置(運(yùn)行時(shí))。要是B正確執(zhí)行,A運(yùn)行的位置必須與B的假定一致。

⑥ A提供的服務(wù)/數(shù)據(jù)的質(zhì)量。要是B正確執(zhí)行,設(shè)計(jì)A所提供的數(shù)據(jù)或服務(wù)的質(zhì)量的一些屬性必須與B的假定一致。例如,某個(gè)特定的傳感器所提供的數(shù)據(jù)必須有一定的準(zhǔn)確性,以使B的算法能夠正常運(yùn)行。

⑦ A的存在。要是B正常執(zhí)行,A必須存在。例如,如果B請(qǐng)求對(duì)象A提供服務(wù),而A不存在并且不能動(dòng)態(tài)創(chuàng)建,那么B就不能正常執(zhí)行。

⑧ A的資源行為。要使B正常執(zhí)行,A的資源行為必須與B的假定一致。這可以是A的資源使用(A使用與B相同的內(nèi)存)或資源擁有(B保留了A認(rèn)為屬于它的資源)。

沒有任何一個(gè)戰(zhàn)術(shù)一定能夠防止語義變更的連鎖反應(yīng)。首先討論與特定模塊的接口相關(guān)的那些戰(zhàn)術(shù)——信息隱藏和維持現(xiàn)有的接口——然后討論一個(gè)違反了依賴鏈的戰(zhàn)術(shù)——仲裁者的使用。

⑴信息隱藏。信息隱藏就是把某個(gè)實(shí)體(一個(gè)系統(tǒng)或系統(tǒng)的某個(gè)分解)的責(zé)任分解為更小的部分,并選擇使哪些信息成為公有的,哪些信息成為私有的。可以通過指定的接口獲得公有責(zé)任。信息隱藏的目的是將變更隔離在一個(gè)模塊內(nèi),防止變更擴(kuò)散到其他模塊。這是防止變更擴(kuò)散的最早的技術(shù)。它與“預(yù)期期望的變更有很大關(guān)系”,因?yàn)樗褂媚切┳兏鳛榉纸獾幕A(chǔ)。

⑵維持現(xiàn)有的接口。如果B依賴于A的一個(gè)接口的名字和簽名,則維持該接口及其語法能夠使B保持不變。當(dāng)然如果B對(duì)A有語義依賴性,那么該戰(zhàn)術(shù)不一定會(huì)起作用,因?yàn)楹茈y屏蔽對(duì)數(shù)據(jù)和服務(wù)的含義的改變。此外,也很難屏蔽對(duì)服務(wù)質(zhì)量、數(shù)量質(zhì)量、資源使用和資源擁有的依賴性。還可以通過將接口與實(shí)現(xiàn)分離來實(shí)現(xiàn)該接口的穩(wěn)定性。這使得能夠創(chuàng)建屏蔽變化的抽象接口。變化可以包含在現(xiàn)有的責(zé)任中,或者可以通過用模塊的一個(gè)實(shí)現(xiàn)代替另一個(gè)實(shí)現(xiàn)來包含變化。

實(shí)現(xiàn)該戰(zhàn)術(shù)的模式包括:

1.添加接口。大多數(shù)編程語言允許多個(gè)接口。可以通過新接口提供最新的可見的服務(wù)或者數(shù)據(jù),從而使得現(xiàn)有的接口保持不變并提供相同的簽名。

2.添加適配器。給A添加一個(gè)適配器,該適配器把A包裝起來,并提供原始A的簽名。

3.提供一個(gè)占位程序A。如果修改要求刪除A,且B僅依賴于A的簽名,那么為A提供一個(gè)占位程序能夠使B保持不變。

⑶限制通信路徑。限制與一個(gè)給定的模塊共享數(shù)據(jù)的模塊。也就是說,減少使用由該給定模塊所產(chǎn)生的數(shù)據(jù)的模塊的數(shù)量,以及產(chǎn)生由該模塊所使用的數(shù)據(jù)的模塊的數(shù)量。這會(huì)減少連鎖反應(yīng),因?yàn)閿?shù)據(jù)產(chǎn)生/使用引入了導(dǎo)致連鎖反應(yīng)的依賴。

⑷仲裁者的使用。如果B對(duì)A具有非語義的任何類型的依賴,那么,在A和B之間插入一個(gè)仲裁者是有可能的,以管理與該依賴相關(guān)的活動(dòng)。所有這些仲裁者都有不同的名字,但我們將根據(jù)列舉的依賴類型對(duì)每個(gè)仲裁者進(jìn)行討論。如前所述,在最糟糕的情況下,仲裁者不能補(bǔ)償語義變化。仲裁者是:

1.數(shù)據(jù)(語法)。存儲(chǔ)庫充當(dāng)數(shù)據(jù)的生產(chǎn)者和使用者之前的仲裁者。存儲(chǔ)庫可以把A產(chǎn)生的語法轉(zhuǎn)換為符合B的語法。一些發(fā)布/訂閱模式(那些具有通過中央組件的數(shù)據(jù)流的模式)也可以把該語法轉(zhuǎn)換為符合B的語法。MVC和PAC模式把一種形式的數(shù)據(jù)(輸入輸出設(shè)備)轉(zhuǎn)換為另一種形式的數(shù)據(jù)(由MVC和PAC中的抽象所使用的形式)。

2.服務(wù)(語法)。正面、橋、調(diào)停者、策略、代理和工廠模式都提供了把服務(wù)的語法從一種形式轉(zhuǎn)換為另一種形式的仲裁者。因此,可以使用他們防止A的變化擴(kuò)散到B。

1. A的接口的身份。可以使用經(jīng)紀(jì)人模式屏蔽一個(gè)接口的身份中的變化。如果B依賴于A的一個(gè)接口的身份并且該身份發(fā)生了變化,通過向經(jīng)紀(jì)人添加該身份,并使該經(jīng)紀(jì)人與A的新身份進(jìn)行連接,B可以保持不變。

2. A的位置(運(yùn)行時(shí))。名稱服務(wù)器能夠使A的位置發(fā)生變化,且不影響B(tài)。A負(fù)責(zé)在名稱服務(wù)器中注冊(cè)其當(dāng)前的位置,B從名稱服務(wù)器中檢索該位置。

3. A的資源行為或由A控制的資源(運(yùn)行時(shí))。資源管理器是一個(gè)負(fù)責(zé)進(jìn)行資源非配的仲裁者。某些資源管理器(例如那些基于實(shí)時(shí)系統(tǒng)中速率單調(diào)性分析的管理器)可以保證滿足在某些限制條件中的所有請(qǐng)求。當(dāng)然,A必須把對(duì)該資源的控制轉(zhuǎn)讓給資源管理器。

4. A的存在。工廠模式能夠根據(jù)需要?jiǎng)?chuàng)建實(shí)例,因此B對(duì)A的存在的依賴性由該工廠的操作來滿足。

3>推遲綁定時(shí)間。

可修改性場(chǎng)景包括通過減少需要修改的的數(shù)量不能滿足的兩個(gè)元素—部署時(shí)間以及允許非開發(fā)人員進(jìn)行修改。推遲綁定時(shí)間支持這兩個(gè)場(chǎng)景,但需要提供額外的基礎(chǔ)結(jié)構(gòu)來支持后期綁定。

可以把各個(gè)時(shí)間決策綁定到執(zhí)行系統(tǒng)中。我們討論一下那些影響部署時(shí)間的決策。系統(tǒng)的部署由某個(gè)過程來規(guī)定。當(dāng)修改由開發(fā)人員進(jìn)行時(shí),通常會(huì)有一個(gè)測(cè)試和分布過程,該過程確定進(jìn)行改變和該改變對(duì)最終用戶可用之間的時(shí)間延遲。在運(yùn)行時(shí)綁定意味著系統(tǒng)已經(jīng)為該綁定做好了準(zhǔn)備,并且完成了所有的測(cè)試和分配步驟。推遲綁定時(shí)間還能夠使最終用戶或系統(tǒng)管理員進(jìn)行設(shè)置,或提供影響行為的輸入。

許多戰(zhàn)術(shù)的目的是在載入時(shí)或運(yùn)行時(shí)產(chǎn)生的影響,如下所示:

1. 運(yùn)行時(shí)注冊(cè)支持即插即用操作,但需要管理注冊(cè)額外開銷。例如,發(fā)布/訂閱注冊(cè)可以在運(yùn)行時(shí)或載入時(shí)實(shí)現(xiàn)。

2.配置文件的目的是在啟動(dòng)時(shí)設(shè)置參數(shù)。

3. 多態(tài)允許方法調(diào)用的后期綁定。

4.組件更換允許載入時(shí)間綁定。

5.遵守已定義的協(xié)議允許獨(dú)立進(jìn)程的運(yùn)行時(shí)綁定。

3. 性能戰(zhàn)術(shù)

性能戰(zhàn)術(shù)的目標(biāo)就是對(duì)在一定的時(shí)間限制內(nèi)到達(dá)系統(tǒng)的事件生成一個(gè)響應(yīng)。事件到達(dá)后系統(tǒng)或者對(duì)該事件進(jìn)行處理,或者由于某些原因處理被阻塞。下面是產(chǎn)生響應(yīng)時(shí)間的兩個(gè)基本因素:資源消耗和閉鎖時(shí)間

資源消耗:包括CPU、數(shù)據(jù)存儲(chǔ)、網(wǎng)絡(luò)通信帶寬和內(nèi)存,但它也可以包括由設(shè)計(jì)中的特定系統(tǒng)所定義的實(shí)體。例如必須對(duì)緩沖器進(jìn)行管理,并且對(duì)關(guān)鍵部分的訪問必須是按順序進(jìn)行的。事件可以是各種類型的,每種類型的事件都經(jīng)過了一個(gè)處理序列。

閉鎖時(shí)間:可能會(huì)由于資源爭(zhēng)用、資源不可用或者計(jì)算依賴于另外一個(gè)還不能得到的計(jì)算結(jié)果而導(dǎo)致計(jì)算不能使用某個(gè)資源,從而阻止了計(jì)算的進(jìn)行。

1.資源爭(zhēng)用。這些事件可能是單個(gè)流,也可能是多個(gè)流。爭(zhēng)用同一個(gè)資源的多個(gè)流或相同流中爭(zhēng)用同一個(gè)資源的不同事件會(huì)增加等待時(shí)間。

2.資源的可用性。即使沒有爭(zhēng)用,如果資源不可用,計(jì)算也無法進(jìn)行下去。資源離線、組件故障、或其他原因都會(huì)導(dǎo)致資源不可用。在任何情況下,設(shè)計(jì)師都必須確定資源不可用可能會(huì)導(dǎo)致急劇增加等待時(shí)間的位置。

3.對(duì)其他計(jì)算的依賴性。計(jì)算可能必須等待,因?yàn)樗仨毰c一個(gè)計(jì)算的結(jié)果同步,或者是因?yàn)樗诘却鶈?dòng)的一個(gè)計(jì)算的結(jié)果。例如,它可能會(huì)從兩個(gè)不同的源讀取信息,如果這兩個(gè)源是按順序讀取的話,等待時(shí)間將會(huì)比并行讀取高。

1> 資源需求。

事件流是資源需求的源。需求的兩個(gè)特征是:資源流中的事件之間的時(shí)間(在事件流中多長(zhǎng)時(shí)間進(jìn)行一次請(qǐng)求);每個(gè)請(qǐng)求所消耗的資源是多少。

減少等待時(shí)間的一個(gè)戰(zhàn)術(shù)就是減少處理一個(gè)事件流所需要的資源。方法如下:

1. 提高計(jì)算效率。處理事件或消息中的一個(gè)步驟就是應(yīng)用某個(gè)算法。改進(jìn)在關(guān)鍵的地方所使用的算法將減少等待時(shí)間。有時(shí)可以用一種資源換取另一種資源。例如,可以把仲裁者數(shù)據(jù)保存在存儲(chǔ)庫中,也可以重新生成,這取決于時(shí)間和空間資源的可用性。該戰(zhàn)術(shù)通常用在處理器上,但用在其他資源上也是有效的,如磁盤。

2. 減少計(jì)算開銷。如果沒有資源請(qǐng)求,就可以減少處理需求。

減少等待時(shí)間的另外一個(gè)戰(zhàn)術(shù)就是減少所處理事件的數(shù)量。可以用一下方式進(jìn)行:

1.管理事件率。如果可以降低監(jiān)視環(huán)境變量處的取樣頻率,就可以減少需求。如果系統(tǒng)進(jìn)行了超量設(shè)計(jì)的話,這樣做是不可行的,其他時(shí)候使用不必要的高采樣率來建立多個(gè)流之間的和諧周期。也就說,某個(gè)流或事件被過采樣,以使他們可以被同步化。

2.控制采樣頻率。如果沒有對(duì)外部生成的事件的到達(dá)進(jìn)行控制,則可以用一個(gè)較低的頻率對(duì)排隊(duì)的請(qǐng)求進(jìn)行采樣,這樣可能會(huì)導(dǎo)致請(qǐng)求的丟失。

用于減少或管理需求的其他戰(zhàn)術(shù)包括控制資源的使用。

3.限制執(zhí)行時(shí)間。限制用多少執(zhí)行時(shí)間對(duì)事件做出響應(yīng)。有時(shí)這樣做有意義,有時(shí)沒有意義。對(duì)于迭代、依賴于數(shù)據(jù)的算法,限制迭代的數(shù)量就是限制執(zhí)行時(shí)間的一個(gè)方法。

4.限制隊(duì)列的大小。這控制了排成隊(duì)列到達(dá)事件的最大數(shù)量,因此控制了用來處理到達(dá)事件的資源。

2> 資源管理

盡管不能控制對(duì)資源的需求,但對(duì)這些資源的管理會(huì)影響響應(yīng)時(shí)間。下面是一些資源管理的戰(zhàn)術(shù)。

1.引入并發(fā)。如果可以并行處理,就可以減少閉鎖時(shí)間。可以通過在不同的線程上處理不同的事件流或者創(chuàng)建額外的線程來處理不同的活動(dòng)集來引入并發(fā)。引入并發(fā)后,適當(dāng)?shù)匕丫€程分配給資源(負(fù)載均衡)非常重要,以盡可能利用并發(fā)。

2.維持?jǐn)?shù)據(jù)或計(jì)算的多個(gè)副本。客戶機(jī)—服務(wù)器模式中的客戶機(jī)是計(jì)算的副本。使用副本的目的是減少在中央服務(wù)器上進(jìn)行所有的計(jì)算時(shí)出現(xiàn)的爭(zhēng)用。高速緩存的數(shù)據(jù)通常是現(xiàn)有數(shù)據(jù)的一個(gè)副本,因此使用副本一致和同步就變成了系統(tǒng)必須承擔(dān)的責(zé)任。

3.增加可用資源。速度更快的處理器、額外的處理器、額外的內(nèi)存以及速度更快的網(wǎng)絡(luò)都可以減少等待時(shí)間。在選擇資源時(shí),通常會(huì)考慮成本,但增加資源絕對(duì)也是一個(gè)減少等待時(shí)間的戰(zhàn)術(shù)。

3> 資源仲裁

當(dāng)存在資源爭(zhēng)用時(shí),必須對(duì)資源進(jìn)行調(diào)度。我們需要對(duì)處理器、緩沖器和網(wǎng)絡(luò)進(jìn)行調(diào)度安排。設(shè)計(jì)師的目標(biāo)是理解每個(gè)資源使用的特性,并選擇之一致的調(diào)度策略。

從概念上講調(diào)度策略都有兩部分:優(yōu)先級(jí)分配和分派。所有的調(diào)度策略都分配優(yōu)先級(jí)。一些常見的調(diào)度策略為:

1.先進(jìn)先出。FIFO隊(duì)列同等看待對(duì)資源的所有請(qǐng)求,并依次對(duì)其進(jìn)行處理。在FIFO隊(duì)列中,一個(gè)請(qǐng)求可能被另一個(gè)需要很長(zhǎng)時(shí)間來生成響應(yīng)的請(qǐng)求阻止。只有所有請(qǐng)求優(yōu)先級(jí)都是相同的,這就不是一個(gè)問題;但如果一些請(qǐng)求的優(yōu)先級(jí)高于其他請(qǐng)求的優(yōu)先級(jí),就存在這個(gè)問題。

--固定優(yōu)先級(jí)調(diào)度。

固定優(yōu)先級(jí)調(diào)度為每個(gè)請(qǐng)求資源的源分配一個(gè)特定的優(yōu)先級(jí),并按該優(yōu)先級(jí)順序分配資源。該策略能夠保證為優(yōu)先級(jí)較高的請(qǐng)求提供更好的服務(wù),但是,對(duì)一些優(yōu)先級(jí)較低的請(qǐng)求來說,肯能要等待很長(zhǎng)的時(shí)間才能得到服務(wù),因?yàn)樗懊嬗泻芏鄡?yōu)先級(jí)較高的請(qǐng)求。3個(gè)常見的優(yōu)先級(jí)策略為:

⑴語義重要性。每個(gè)流都根據(jù)生成它的任務(wù)的某個(gè)與領(lǐng)域特性被靜態(tài)地分配一個(gè)優(yōu)先級(jí)。這種調(diào)度在大型機(jī)系統(tǒng)中,其中領(lǐng)域特性是任務(wù)啟動(dòng)的時(shí)間。

⑵時(shí)限時(shí)間單調(diào)。時(shí)限時(shí)間單調(diào)是一種靜態(tài)優(yōu)先級(jí)分配,它將較高的優(yōu)先級(jí)分配給具有較短時(shí)限時(shí)間的流。在調(diào)度的不同優(yōu)先級(jí)流具有實(shí)時(shí)時(shí)限時(shí)間時(shí),使用該調(diào)度策略。

⑶速率單調(diào)。速率單調(diào)是周期流的一種靜態(tài)優(yōu)先級(jí)分配,它將較高的優(yōu)先級(jí)分配給具有較短周期的流。該調(diào)度策略是時(shí)限時(shí)間單調(diào)的一種特殊情況,但它更為我們所熟知,操作系統(tǒng)對(duì)此提供支持的可能性較大。

--動(dòng)態(tài)優(yōu)先級(jí)調(diào)度

⑴輪轉(zhuǎn)。輪轉(zhuǎn)是一種調(diào)度策略,它對(duì)請(qǐng)求進(jìn)行排序,然后在允許的時(shí)候,把資源分配給該排序中的下一個(gè)請(qǐng)求。輪轉(zhuǎn)的一個(gè)特殊形式就是循環(huán)執(zhí)行,在循環(huán)執(zhí)行中,資源分配是每隔一個(gè)固定的時(shí)間進(jìn)行的。

⑵時(shí)限時(shí)間最早優(yōu)先。時(shí)限時(shí)間最早優(yōu)先根據(jù)具有最早的視線時(shí)間的掛起請(qǐng)求來分配優(yōu)先級(jí)。

--靜態(tài)調(diào)度。循環(huán)執(zhí)行調(diào)度是一種調(diào)度策略,在該策略中,離線確定先占點(diǎn)和資源分配順序。

4. 安全性戰(zhàn)術(shù)

安全性戰(zhàn)術(shù)分為:與抵抗攻擊有關(guān)的戰(zhàn)術(shù)、與檢測(cè)攻擊有關(guān)的戰(zhàn)術(shù)以及從攻擊中恢復(fù)有關(guān)的戰(zhàn)術(shù)。給門裝鎖就是在抵抗攻擊,在房子中放一個(gè)運(yùn)動(dòng)傳感器就是在檢測(cè)攻擊,給房子上保險(xiǎn)就是從攻擊總恢復(fù)。

1> 抵抗攻擊。

我們把認(rèn)可、機(jī)密性、完整性和保證確定為目標(biāo)。可以組合使用下面的戰(zhàn)術(shù)來實(shí)現(xiàn)這些目標(biāo)。

1.對(duì)用戶身份驗(yàn)證。身份驗(yàn)證能夠保證進(jìn)行訪問的用戶或遠(yuǎn)程計(jì)算機(jī)確實(shí)是它所聲稱的用戶或計(jì)算機(jī)。密碼、一次性密碼、數(shù)字證書以及生物識(shí)別均提供身份驗(yàn)證。

2.對(duì)用戶進(jìn)行授權(quán)。授權(quán)能夠保證經(jīng)過了身份驗(yàn)證的用戶有權(quán)訪問和修改數(shù)據(jù)或服務(wù)。這通常通過在系統(tǒng)中提供一些訪問控制模式進(jìn)行管理。可以對(duì)單個(gè)用戶進(jìn)行訪問控制,也可以對(duì)某一類用戶進(jìn)行訪問控制。也可以根據(jù)用戶分組、用戶角色或個(gè)人列表定義用戶類。

3.維護(hù)數(shù)據(jù)的機(jī)密性。應(yīng)該對(duì)數(shù)據(jù)進(jìn)行保護(hù),以防止未經(jīng)授權(quán)的訪問。一般通過對(duì)數(shù)據(jù)和通訊鏈路進(jìn)行某種形式的加密來實(shí)現(xiàn)機(jī)密性。另一方面,通信鏈路一般不具有授權(quán)控制,對(duì)于通過公共可訪問的通信鏈路傳數(shù)據(jù)來說,加密是唯一的保護(hù)措施。對(duì)基于web的鏈路,可以通過VPN或者SSL來實(shí)現(xiàn)該鏈路。

4.維護(hù)完整性。應(yīng)該如期提供數(shù)據(jù),數(shù)據(jù)中可能有冗余信息、如校驗(yàn)或哈希值,他們可以與原始數(shù)據(jù)一起進(jìn)行加密,也可以單獨(dú)加密。

5.限制暴露的信息。攻擊者通常會(huì)利用暴露的某個(gè)弱點(diǎn)來攻擊主機(jī)上的所有數(shù)據(jù)和服務(wù)。設(shè)計(jì)師可以設(shè)計(jì)服務(wù)在主機(jī)上的分配,以使只能在每個(gè)主機(jī)上獲得有限的服務(wù)。

6.限制訪問。防火墻根據(jù)消息源或目的地端口來限制訪問。來自未知源的消息可能是某種形式的攻擊。限制對(duì)已知源的訪問并不總是可行的,例如,一個(gè)公共網(wǎng)站上可能會(huì)有來自未知源的請(qǐng)求。這種情況中使用一個(gè)配置就是所謂的解除管制區(qū)。

2> 檢測(cè)攻擊。

檢測(cè)攻擊通常通過“入侵檢測(cè)”系統(tǒng)進(jìn)行。

3> 從攻擊中恢復(fù)。

可以把從攻擊中恢復(fù)的戰(zhàn)術(shù)分為恢復(fù)狀態(tài)相關(guān)的戰(zhàn)術(shù)和與識(shí)別攻擊者相關(guān)的戰(zhàn)術(shù)。在將系統(tǒng)或數(shù)據(jù)恢復(fù)到正確狀態(tài)時(shí)所使用的戰(zhàn)術(shù)與用于可用性的戰(zhàn)術(shù)發(fā)生了重疊,因此他們都是從不一致的狀態(tài)恢復(fù)到一致狀態(tài)。差別就是要特別注意維護(hù)系統(tǒng)管理數(shù)據(jù)的冗余副本,如密碼、訪問控制列表、域名服務(wù)和用戶資料數(shù)據(jù)。

用于識(shí)別攻擊者的戰(zhàn)術(shù)就是“維持審計(jì)追蹤”。審計(jì)追蹤就是應(yīng)用到系統(tǒng)中的數(shù)據(jù)的所有事務(wù)和識(shí)別信息的一個(gè)副本。可以使用審計(jì)信息開追蹤攻擊者的操作。支持認(rèn)可并支持系統(tǒng)恢復(fù)。

5. 可測(cè)試性戰(zhàn)術(shù)

可測(cè)試性戰(zhàn)術(shù)目標(biāo)是允許在完成一個(gè)軟件開發(fā)的增量后,輕松地對(duì)軟件進(jìn)行測(cè)試。我們對(duì)兩類用于測(cè)試的戰(zhàn)術(shù)進(jìn)行討論:提供輸入并捕獲輸出;內(nèi)部監(jiān)視。

1> 輸入/輸出

1.記錄回放。記錄回放是指捕獲跨接口的信息,并將其作為測(cè)試專用軟件的輸入。在正常操作中操作中跨一個(gè)接口的信息保存在某個(gè)存儲(chǔ)庫中,它代表來自一個(gè)組件的輸出和傳到一個(gè)組件的輸入。記錄該信息使得能夠生成對(duì)其中一個(gè)組件的測(cè)試輸入,并保存用于以后比較測(cè)試輸出。

2.將接口與實(shí)現(xiàn)分離。將接口與實(shí)現(xiàn)分離允許實(shí)現(xiàn)的代替,以支持各種測(cè)試目的。占位實(shí)現(xiàn)允許在缺少被占用的組件時(shí),對(duì)系統(tǒng)的剩余部分進(jìn)行測(cè)試。用一個(gè)組件代替某個(gè)專門的組件能夠使被代替的組件充當(dāng)系統(tǒng)剩余部分的測(cè)試工具。

3.特化訪問路線/接口。具有特化的測(cè)試接口允許通過測(cè)試工具并獨(dú)立于其正常操作,來捕獲或指定組件的變量值。例如,可以通過允許特化的接口提供原數(shù)據(jù),測(cè)試工具利用該接口推動(dòng)其活動(dòng)。

2> 內(nèi)部監(jiān)視

內(nèi)置監(jiān)視器。組件可以維持狀態(tài)、性能負(fù)載、容量、安全性或其他可通過接口訪問的信息。此接口可以是該組件的一個(gè)永久接口,也可以是通過instrumentation技巧臨時(shí)引入的接口,如面向方面編程或預(yù)處理程序宏。一個(gè)常見的技巧就是當(dāng)監(jiān)視狀態(tài)被激活時(shí)記錄事件。監(jiān)視狀態(tài)實(shí)際上會(huì)增加測(cè)試工作,因?yàn)殡S著監(jiān)視的關(guān)閉,可能必須重復(fù)測(cè)試。盡管額外測(cè)試需要一定的開銷,但這卻使組件活動(dòng)的可見性得以提高,這樣做是值得的。

6. 易用性戰(zhàn)術(shù)

易用性與用戶完成期望任務(wù)的難易程度以及系統(tǒng)為用戶提供的支持種類有關(guān)。有兩種類型的戰(zhàn)術(shù)支持易用性,每種戰(zhàn)術(shù)所針對(duì)的是兩種類別的“用戶”。第一類是運(yùn)行時(shí),包括那些在系統(tǒng)運(yùn)行期間支持用戶的戰(zhàn)術(shù)。第二類基于用戶接口設(shè)計(jì)的迭代特性,它在設(shè)計(jì)時(shí)支持接口開發(fā)人員。

1> 運(yùn)行時(shí)戰(zhàn)術(shù)。

一旦系統(tǒng)執(zhí)行,就可以通過為用戶提供關(guān)于系統(tǒng)正在做什么的反饋,以及用于提供發(fā)出基于易用性命令的能力來增強(qiáng)易用性。例如,在糾錯(cuò)或更高效的操作中,“取消”、“撤銷”、“聚合”和“顯示多個(gè)視圖”均為用戶提供支持。

1.維持任務(wù)的一個(gè)模型。這種情況下,所維持的模型是關(guān)于任務(wù)的信息。任務(wù)模型用于確定上下文,以使該系統(tǒng)了解用戶試圖做什么,并提供各種協(xié)助。例如,知道句子通常以大寫字母開頭能夠使應(yīng)用程序糾正該位置的小寫字母。

2.維持用戶的一個(gè)模型。維持的模型是關(guān)于用戶的信息。它確定了用戶對(duì)該系統(tǒng)的了解,用戶在期望的響應(yīng)時(shí)間方面的行為,以及特定于某個(gè)用戶或某類用戶的其他方面。例如,維持用戶模型能夠使系統(tǒng)以用戶可以閱讀月面的速度滾動(dòng)頁面。

3.維持系統(tǒng)的一個(gè)模型。所維持的模型就是關(guān)于系統(tǒng)的信息。它確定了期望的系統(tǒng)行為,以便為用戶提供適當(dāng)?shù)姆答仭O到y(tǒng)模型反饋預(yù)測(cè)了諸如完成當(dāng)前活動(dòng)所需要時(shí)間的項(xiàng)目。

2> 設(shè)計(jì)時(shí)戰(zhàn)術(shù)。

在測(cè)試過程中,通常會(huì)頻繁修改用戶接口。也就是說,易用性工程師將為開發(fā)人員提供對(duì)當(dāng)前接口設(shè)計(jì)的修改,開發(fā)人員將實(shí)現(xiàn)這些修改。這導(dǎo)致了對(duì)語義一致的可修改性的求精。

將用戶接口與應(yīng)用的其余部分分離開來。局部化所期望的變更是語義一致的一個(gè)基本原理。因?yàn)樵陂_發(fā)中和部署后,我們預(yù)計(jì)用戶接口頻繁發(fā)生變化,因此單獨(dú)維護(hù)用戶接口代碼將會(huì)變更局部化在某個(gè)地方。開發(fā)用于實(shí)現(xiàn)該戰(zhàn)術(shù)并支持用戶接口修改的軟件架構(gòu)模式為:

模型——視圖——控制器

表示——抽象——控制

Seeheim

Arch/Slinky

7. 戰(zhàn)術(shù)與架構(gòu)模式的關(guān)系

Active Objcet設(shè)計(jì)模式將方法執(zhí)行從方法調(diào)用中分離出來,以增強(qiáng)并發(fā),并簡(jiǎn)化對(duì)駐留在其自身控制線程中的對(duì)象的同步訪問。

該模式由6個(gè)元素組成:代理,它提供了允許客戶對(duì)主動(dòng)對(duì)象調(diào)用公共訪問方法的接口;方法請(qǐng)求,它定義了用于執(zhí)行主動(dòng)對(duì)象的方法的一個(gè)接口;激活接口,它維持了掛起方法請(qǐng)求的一個(gè)緩沖器;調(diào)度程序,它決定接下來執(zhí)行什么方法請(qǐng)求;附屬,他定義可建模為主動(dòng)對(duì)象的行為和狀態(tài);將來,它允許客戶獲得方法調(diào)用的結(jié)果。

該模式的動(dòng)機(jī)就是增強(qiáng)并發(fā)性——這是一個(gè)性能目標(biāo)。因此其主要目的就是實(shí)現(xiàn)“引入并發(fā)“性能戰(zhàn)術(shù)。然而,還要注意該模式包含的其他戰(zhàn)術(shù)。

信息隱藏(可修改性)。每個(gè)元素都選擇了它將實(shí)現(xiàn)的責(zé)任,并將其實(shí)現(xiàn)隱藏在接口后面。

仲裁者(可修改性)。該代理充當(dāng)著把變化緩沖到方法調(diào)用中的仲裁者。

綁定時(shí)間(可修改性)。主動(dòng)對(duì)象模式假定對(duì)該對(duì)象的請(qǐng)求在運(yùn)行時(shí)到達(dá)該對(duì)象。然而,并沒有確定客戶機(jī)與代理的綁定時(shí)間。

調(diào)度策略(性能)。調(diào)度程序?qū)崿F(xiàn)一些調(diào)度策略。

對(duì)設(shè)計(jì)師來說,分析過程包括理解嵌入在實(shí)現(xiàn)中的所有戰(zhàn)術(shù);設(shè)計(jì)過程包括在關(guān)于哪些戰(zhàn)術(shù)最和將實(shí)現(xiàn)系統(tǒng)期望的目標(biāo)方面,做出一個(gè)明智的選擇。

8. 架構(gòu)模式和樣式

軟件中架構(gòu)模式與建筑物中的架構(gòu)樣式類似,它由幾個(gè)將他們組合起來以維持架構(gòu)完整性的關(guān)鍵特性和規(guī)則組成。架構(gòu)模式由以下幾個(gè)因素確定:

一組元素類型(如數(shù)據(jù)存儲(chǔ)庫或計(jì)算數(shù)學(xué)函數(shù)的組件)

指出其相互關(guān)系的元素的拓?fù)洳季帧?/p>

一組語義限制(如管道——過濾器樣式中的過濾器是純數(shù)據(jù)轉(zhuǎn)化器——他們以增量形式將其輸入流轉(zhuǎn)換為輸出流,但并不控制上游流或下游元素)。

一組交互機(jī)制(如子例程調(diào)用、事件——調(diào)閱者、黑板)、他們確定元素將如何通過允許的拓?fù)溥M(jìn)行協(xié)調(diào)。
架構(gòu)模式和戰(zhàn)術(shù)之間是什么關(guān)系呢?正如已經(jīng)說明的那樣,我們把戰(zhàn)術(shù)看作是設(shè)計(jì)的基本“構(gòu)建塊”,并根據(jù)該戰(zhàn)術(shù)創(chuàng)建架構(gòu)模式和策略。

總結(jié)

以上是生活随笔為你收集整理的【转载】实现软件架构质量属性的战术的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。