2011年軟考系統(tǒng)架構(gòu)設(shè)計(jì)師學(xué)習(xí)筆記第九章
面向構(gòu)件的軟件設(shè)計(jì)
9.1 術(shù)語、概念
1、構(gòu)件
構(gòu)件的特征如下:
獨(dú)立部署單元。
作為第三方的組裝單元。
沒有(外部的)可見狀態(tài)。
獨(dú)立可部署,意味著 必須能 跟他所在的環(huán)境 及 其他構(gòu)件 完全分離。
原子性,構(gòu)件不但必須具備足夠好的內(nèi)聚性,還必須將自己的依賴條件和所提供的服務(wù)說明清楚。
緩存具有這樣的特征:當(dāng)它被清空時(shí),除了可能會(huì)降低性能以外,沒有其它后果。
構(gòu)建本質(zhì)上沒有狀態(tài),同一操作系統(tǒng)進(jìn)程中 裝載多個(gè)構(gòu)件的拷貝 是毫無意義的,至多會(huì)存在一個(gè)特定構(gòu)件的拷貝。
許多系統(tǒng)中,構(gòu)建被實(shí)現(xiàn)為 大粒度的單元,工資管理服務(wù)程序就是一個(gè)構(gòu)件,工資數(shù)據(jù)只是實(shí)例(對(duì)象),將不易變的“模型”和易變的“實(shí)例”分離的做法避免了大量的維護(hù)問題。
2、對(duì)象
對(duì)象的特征如下:
一個(gè)實(shí)例單元,具有唯一的標(biāo)志。
可能具有狀態(tài),此狀態(tài)外部可見。
封裝了自己的狀態(tài)和行為。
顯式存在的實(shí)例化方案稱為類,也有隱式的實(shí)例化方案,既通過克隆一個(gè)已存在的對(duì)象來實(shí)現(xiàn),即原型對(duì)象。
新生的對(duì)象都必須被設(shè)置一個(gè)初始狀態(tài),創(chuàng)建與初始化 對(duì)象 的代碼可以是一個(gè)靜態(tài)過程——類的一部分,稱為構(gòu)造函數(shù)。
如果這個(gè)對(duì)象是專門用來創(chuàng)建與初始化對(duì)象的,稱為 工廠。
對(duì)象中 專門用來返回其他 新創(chuàng)建的對(duì)象的方法 稱為 工廠方法。
3、構(gòu)件與對(duì)象
構(gòu)件通常包含了若干類 或 不可更改的 原型對(duì)象。還包括一系列對(duì)象。
但構(gòu)件并非一定要包含類元素,它甚至可以不包含類,可以擁有傳統(tǒng)過程體,甚至全局變量。
構(gòu)件創(chuàng)建的對(duì)象——更確切地說是對(duì)這些對(duì)象的 引用——可以與該構(gòu)件分離開來,并對(duì)構(gòu)件的客戶可見。構(gòu)件的客戶通常是指其他構(gòu)件。
一個(gè)構(gòu)件可以包含多個(gè)類元素,但是一個(gè)類元素只能屬于一個(gè)構(gòu)建。將一個(gè)類拆分進(jìn)行部署通常沒有什么意義。
4、模塊
模塊化方法成熟的標(biāo)志是其對(duì)分離編譯技術(shù)的支持,包括跨模塊的正確的類型檢查能力。
模塊沒有實(shí)例化的概念,在任何情況下,模塊都可以包含多個(gè)類。類之間的繼承關(guān)系并不受模塊界限的限制。
模塊本身就可以作為一個(gè)最簡(jiǎn)單的構(gòu)件,這些庫(kù)是功能性的,而不是面向?qū)ο蟮摹?/p>
資源可以參數(shù)化一個(gè)構(gòu)件,重新配置該構(gòu)件而無需更改構(gòu)件代碼,例如,本地化設(shè)置可以通過資源配置實(shí)現(xiàn)。
某些情況下,模塊并不適合作為構(gòu)件,構(gòu)件沒有外部可見的狀態(tài),但是模塊卻可以顯式地用全局變量來使其狀態(tài)可見。
5、白盒抽象、黑盒抽象 與 重用 白盒抽象中,可以通過繼承對(duì)構(gòu)件的實(shí)現(xiàn)細(xì)節(jié)進(jìn)行修改,白盒方式中實(shí)現(xiàn)細(xì)節(jié)對(duì)外界是完全可見的。
絕大多數(shù)系統(tǒng)中,(Application Programming Interface,API)相當(dāng)于黑盒重用這些接口的實(shí)現(xiàn)。
白盒重用不可以輕易地被另外的軟件替換,因?yàn)?依賴于 細(xì)節(jié)。
軟件構(gòu)件是一種組裝單元,它具有規(guī)范的接口規(guī)約和顯式的語境依賴,軟件構(gòu)件可以被獨(dú)立地部署并由第三方任意地組裝。
6、接口
接口是一個(gè)已命名的一組操作集合。
一個(gè)構(gòu)件可以有多個(gè)接口,每個(gè)接口提供一種服務(wù)。
盡量不要重復(fù)引入功能相近的接口。
推行標(biāo)準(zhǔn)化,可能會(huì)由于笨拙官僚的“委員會(huì)設(shè)計(jì)”問題而不能達(dá)到***;市場(chǎng)競(jìng)爭(zhēng),的 非技術(shù)本質(zhì) 也可能導(dǎo)致結(jié)果不是***。
接口標(biāo)準(zhǔn)化 是對(duì)消息的 格式、模式、協(xié)議 的標(biāo)準(zhǔn)化,XML 提供了一種統(tǒng)一的數(shù)據(jù)格式。
7、顯式語境依賴
對(duì)部署環(huán)境的具體要求,稱為語境依賴。
8、構(gòu)件的規(guī)模
***化重用 也有一個(gè)潛在的缺點(diǎn)——語境依賴的爆炸性增長(zhǎng)。
語境依賴越多,能滿足構(gòu)件環(huán)境需求的客戶構(gòu)件就越少,降低了可用性。
構(gòu)件設(shè)計(jì)者需要為以上兩者找到一個(gè)平衡點(diǎn),還必須考慮環(huán)境的演化會(huì)使構(gòu)件更加脆弱。
9.2 標(biāo)準(zhǔn)化與規(guī)范化
如果語境依賴能夠被廣泛支持,就不是什么缺點(diǎn)。
1、通用市場(chǎng)與專業(yè)市場(chǎng)
通用市場(chǎng)的標(biāo)準(zhǔn)化是非常困難的,得滿足所有人的需求,網(wǎng)絡(luò)標(biāo)準(zhǔn)就是***的例子。
專業(yè)市場(chǎng)的標(biāo)準(zhǔn)化與通用市場(chǎng)同樣艱辛,由于所涉及的人較少,市場(chǎng)經(jīng)濟(jì)的機(jī)制就不容易很好地發(fā)揮作用。
2、標(biāo)準(zhǔn)的構(gòu)件體系 與 規(guī)范化
要發(fā)揮標(biāo)準(zhǔn)化的作用,就必須使與之競(jìng)爭(zhēng)的其他標(biāo)準(zhǔn)數(shù)目盡量很少。
9.3 構(gòu)件框架
9.3.1 體系結(jié)構(gòu)
構(gòu)件體系結(jié)構(gòu)的核心包括:構(gòu)件和外部環(huán)境的交互;構(gòu)件的角色;標(biāo)準(zhǔn)化工具的界面;對(duì)最終用戶和部署人員的用戶界面 等。
1、體系結(jié)構(gòu)的角色
體系結(jié)構(gòu)是關(guān)于一個(gè)系統(tǒng)的整體視圖,定義了總體的不變性,規(guī)定了恰當(dāng)?shù)目蚣?,限制自由度,?duì)整體功能、性能、可靠性、安全性 的主要考慮過細(xì)的決策可以放一邊。
3、構(gòu)件系統(tǒng)架構(gòu)特性
構(gòu)件系統(tǒng) 體系結(jié)構(gòu) 由一組 平臺(tái)決策、一組 構(gòu)建框架 和 構(gòu)件框架之間的 互操作設(shè)計(jì) 組成。平臺(tái)是允許在其上安裝構(gòu)件和構(gòu)件框架的一個(gè)基礎(chǔ)設(shè)施。
構(gòu)件框架是一種專用的體系結(jié)構(gòu),常常實(shí)現(xiàn)一些協(xié)議以連接構(gòu)件。
多數(shù)原子構(gòu)件永遠(yuǎn)都不會(huì)被單獨(dú)部署,盡管他們可以被單獨(dú)部署。
原子構(gòu)件通常組成地部署。
4、分層的構(gòu)件體系結(jié)構(gòu)
傳統(tǒng)的垂直分層,自底向上地,抽象程度漸增,與應(yīng)用相關(guān)的性質(zhì)逐漸提高。
水平分層是性能和資源相關(guān)性遞減而結(jié)構(gòu)相關(guān)性遞增。
輕量級(jí)體系結(jié)構(gòu)把注意力集中到一個(gè)問題,而不是覆蓋所有問題,如果輕量級(jí)構(gòu)件支持較好的易擴(kuò)展性,它的商業(yè)價(jià)值就非常大。
6、構(gòu)件與生成式編程
必須要精確控制實(shí)際的構(gòu)件邊界,包括提供接口和需求接口,必須能精確控制同其他構(gòu)件間的靜態(tài)依賴。
9.3.2 語境相關(guān)組合構(gòu)建框架
COM+ 增加了可租賃線程“套間”的概念,一次只允許一個(gè)線程入住,但是多個(gè)線程能順序地入住該“套間”。
相同事務(wù)域中的對(duì)象 共享一個(gè)單獨(dú)的邏輯線程和一個(gè)單獨(dú)共享事務(wù)資源集合,一旦線程從事務(wù)域中返回,事務(wù)要么提交要么終止。
COM+中,如果兩個(gè)構(gòu)件共享一組兼容的語境屬性集,則它們可以被看作是處于同一域中。
9.3.3 構(gòu)件開發(fā)
異步問題
事件分發(fā)機(jī)制負(fù)責(zé)接收這些事件對(duì)象,并把它們發(fā)送給對(duì)其感興趣的其他構(gòu)件實(shí)例。
多線程
多線程主要關(guān)注于對(duì)程序執(zhí)行進(jìn)行更好的分配,獲取性能***化的手段卻根本不依賴于多線程,而是盡量在***時(shí)間內(nèi)以最快的速度處理用戶的請(qǐng)求。
【編輯推薦】