???
++++++++++++++
第九章:?系統(tǒng)構(gòu)架
++++++++++++++
182.一個(gè)系統(tǒng)可以(在重大的系統(tǒng)中也確實(shí)如此)同時(shí)出多種不同的構(gòu)架類(lèi)型.?以不同的
方式檢查同一系統(tǒng)|分析系統(tǒng)的不同部分|或使用不同級(jí)
別的分解,?都有可能發(fā)現(xiàn)不同的構(gòu)架類(lèi)型.
183.協(xié)同式的應(yīng)用程序,?或者需要協(xié)同訪問(wèn)共享信息或資源的半自治進(jìn)程,?一般會(huì)采用
集中式儲(chǔ)存庫(kù)構(gòu)架.
184.黑板系統(tǒng)使用集中式的儲(chǔ)存庫(kù),?存儲(chǔ)非結(jié)構(gòu)化的鍵/值對(duì),?作為大量不同代碼元件之
間的通信集線器.
185.當(dāng)處理過(guò)程可以建模|設(shè)計(jì)和實(shí)現(xiàn)成一系列的數(shù)據(jù)變換時(shí),?常常會(huì)使用數(shù)據(jù)流(或管
道—過(guò)濾器)構(gòu)架.
186.在批量進(jìn)行自動(dòng)數(shù)據(jù)處理的環(huán)境中,?經(jīng)常會(huì)采用數(shù)據(jù)流構(gòu)架,?在對(duì)數(shù)據(jù)工具提供大
量支持的平臺(tái)上尤其如此.
187.數(shù)據(jù)流構(gòu)架的一個(gè)明顯征兆是:?程序中使用臨時(shí)文件或流水線(pipeline)在不同進(jìn)
程間進(jìn)行通信.
188.使用圖示來(lái)建模面向?qū)ο髽?gòu)架中類(lèi)的關(guān)系.
189.可以將源代碼輸入到建模工具中,?逆向推導(dǎo)出系統(tǒng)的構(gòu)架.
190.擁有大量同級(jí)子系統(tǒng)的系統(tǒng),?常常按照分層構(gòu)架進(jìn)行組織.
191.分層構(gòu)架一般通過(guò)堆疊擁有標(biāo)準(zhǔn)化接口的軟件組件來(lái)實(shí)現(xiàn).
192.系統(tǒng)中每個(gè)層可以將下面的層看作抽象實(shí)體,?并且(只要該層滿(mǎn)足它的需求說(shuō)明)不
關(guān)心上面的層如何使用它.
193.層的接口既可以是支持特定概念的互補(bǔ)函數(shù)族,?也可以是一系列支持同一抽象接口
不同底層實(shí)現(xiàn)的可互換函數(shù).
194.用C語(yǔ)言實(shí)現(xiàn)的系統(tǒng),?常常用函數(shù)指針的數(shù)組,?表達(dá)層接口的多路復(fù)用操作.
195.用面向?qū)ο蟮恼Z(yǔ)言實(shí)現(xiàn)的系統(tǒng),?使用虛方法調(diào)用直接表達(dá)對(duì)層接口的多嘴復(fù)用操作
.
196.系統(tǒng)可以使用不同的|獨(dú)特的層次分解模型跨各種坐標(biāo)軸進(jìn)行組織.
197.使用程序切片技術(shù),?可以將程序中的數(shù)據(jù)和控制之間依賴(lài)關(guān)系集中到一起.
198.在并發(fā)系統(tǒng)中,?一個(gè)單獨(dú)的系統(tǒng)組件起到集中式管理器的作用,?負(fù)責(zé)啟動(dòng)|停止和協(xié)
調(diào)其他系統(tǒng)進(jìn)程和任務(wù)的執(zhí)行.
199.許多現(xiàn)實(shí)的系統(tǒng)都會(huì)博采眾家之長(zhǎng).?當(dāng)處理此類(lèi)系統(tǒng)時(shí),?不要徒勞地尋找無(wú)所不包
的構(gòu)架圖;?應(yīng)該將不同構(gòu)架風(fēng)格作為獨(dú)立但相關(guān)的實(shí)體
來(lái)進(jìn)行定位|識(shí)別并了解.
200.狀態(tài)變遷圖常常有助于理清狀態(tài)機(jī)的動(dòng)作.
201.在處理大量的代碼時(shí),?了解將代碼分解成單獨(dú)單元的機(jī)制極為重要.
202.大多數(shù)情況下,?模塊的物理邊界是單個(gè)文件|組織到一個(gè)目錄中的多個(gè)文件或擁有統(tǒng)
一前綴的文件的集合.
203.C中的模塊,?由提供模塊公開(kāi)接口的頭文件和提供對(duì)應(yīng)實(shí)現(xiàn)的源文件組成.
204.對(duì)象的構(gòu)造函數(shù)經(jīng)常用來(lái)分配與對(duì)象相關(guān)的資源,?并初始化對(duì)象的狀態(tài).?函數(shù)一般
用來(lái)釋放對(duì)象在生命期中占用的資源.
205.對(duì)象方法經(jīng)常使用類(lèi)字段來(lái)存儲(chǔ)控制所有方法運(yùn)作的數(shù)據(jù)(比如查找表或字典)或維
護(hù)類(lèi)運(yùn)作的狀態(tài)信息(例如,?賦給每個(gè)對(duì)象一個(gè)標(biāo)識(shí)符的
計(jì)數(shù)器).
206.在設(shè)計(jì)良好的類(lèi)中,?所有的字段都應(yīng)在聲明為private,?并用公開(kāi)的訪問(wèn)方法提供對(duì)
它們的訪問(wèn).
207.在遇到friend聲明時(shí),?要停下來(lái)分析一下,?看看繞過(guò)類(lèi)封裝在設(shè)計(jì)上的理由.
208.可以有節(jié)制地用運(yùn)算符增強(qiáng)特定類(lèi)的可用性,?但用運(yùn)算符重載,?將類(lèi)實(shí)現(xiàn)為擁有內(nèi)
建算術(shù)類(lèi)型相關(guān)的全部功能的類(lèi)實(shí)體,?是不恰當(dāng)?shù)?
209.泛型實(shí)現(xiàn)不是在編譯期間通過(guò)宏替換或語(yǔ)言所支持的功能(比如C++模板和Ada的泛型
包)來(lái)實(shí)現(xiàn),?就是在運(yùn)行期間通過(guò)使用數(shù)據(jù)元素的指針
和函數(shù)的指針|或?qū)ο蟮亩鄳B(tài)性實(shí)現(xiàn).
210.抽象數(shù)據(jù)類(lèi)型經(jīng)常用來(lái)封裝常用的數(shù)據(jù)組織方案(比如樹(shù)|列表或棧),?或者對(duì)用戶(hù)隱
藏?cái)?shù)據(jù)類(lèi)型的實(shí)現(xiàn)細(xì)節(jié).
211.使用庫(kù)的目的多種多樣:?重用源代碼或目標(biāo)代碼,?組織模塊集合,?組織和優(yōu)化編譯
過(guò)程,?或是用來(lái)實(shí)現(xiàn)應(yīng)用程序各種特性的按需載入.
212.大型的|分布式的系統(tǒng)經(jīng)常實(shí)現(xiàn)為許多互相協(xié)作的進(jìn)程.
213.對(duì)于基于文本的數(shù)據(jù)儲(chǔ)存庫(kù),?可以通過(guò)瀏覽存儲(chǔ)在其中的數(shù)據(jù),?破譯出它的結(jié)構(gòu).
214.可以通過(guò)查詢(xún)數(shù)據(jù)字典中的表,?或使用數(shù)據(jù)庫(kù)專(zhuān)有的SQL命令,?比如show?table,?來(lái)
分析關(guān)系型數(shù)據(jù)庫(kù)的模式.
215.識(shí)別出重用的構(gòu)架元素后,?可以查找其最初的描述,?了解正確地使用這種構(gòu)架的方
式,?以及可能出現(xiàn)的誤用.
216.要詳細(xì)分析建立在某種框架之上的應(yīng)用程序,?行動(dòng)的最佳路線就是從研究框架自身
開(kāi)始.
217.在閱讀向?qū)傻拇a時(shí),?不要期望太高,?否則您會(huì)感到失望.
218.學(xué)習(xí)幾個(gè)基本的設(shè)計(jì)模式之后,?您會(huì)發(fā)現(xiàn),?您查看代碼構(gòu)架的方式會(huì)發(fā)生改變:?您
的視野和詞匯將會(huì)擴(kuò)展到能夠識(shí)別和描述許多通用的形
式.
219.頻繁使用的一些模式,?但并不顯式地指出它們的名稱(chēng),?這是由于構(gòu)架性設(shè)計(jì)的重用
經(jīng)常先于模式的形成.
220.請(qǐng)?jiān)囍凑盏讓幽J絹?lái)理解構(gòu)架,?即使代碼中并沒(méi)有明確地提及模式.
221.大多數(shù)解釋器都遵循類(lèi)似的處理構(gòu)架,?圍繞一個(gè)狀態(tài)機(jī)進(jìn)行構(gòu)建,?狀態(tài)機(jī)的操作依
賴(lài)于解釋器的當(dāng)前狀態(tài)|程序指令和程序狀態(tài).
222.多數(shù)情況下,?參考構(gòu)架只是為應(yīng)用程序域指定一種概念性的結(jié)構(gòu),?具體的實(shí)現(xiàn)并非
必須遵照這種結(jié)構(gòu).