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