件架構(gòu)設(shè)計(jì)構(gòu)件與中間件技術(shù)-構(gòu)件
構(gòu)件的定義
構(gòu)件的定義不同地方的不同人,對(duì)它有不同的解讀,解讀的方向可能有些不一樣,認(rèn)可度比較高的就是定義1.
- 定義1:軟件構(gòu)件是一種組裝單元,它具有規(guī)范的接口規(guī)約和顯式的語(yǔ)境依賴。軟件構(gòu)件可以被獨(dú)立的部署并由第三方任意組裝。
- 定義2:構(gòu)件是系統(tǒng)中有價(jià)值的,幾乎獨(dú)立的,且可替換的一個(gè)部分。它在良好定義的體系結(jié)構(gòu)語(yǔ)境內(nèi)滿足某清晰的功能。
- 定義3:構(gòu)件是一個(gè)獨(dú)立發(fā)布的功能部分,可以通過(guò)其接口訪問(wèn)它的服務(wù)。
構(gòu)件和傳統(tǒng)的對(duì)象比較,我們一般認(rèn)為構(gòu)件的粒度比對(duì)象要大,服務(wù)又比構(gòu)件要大一號(hào)。而構(gòu)件和對(duì)象具體有如下一些區(qū)別:
構(gòu)件的特性 | 對(duì)象的特性 | 模塊的特性 |
1.獨(dú)立的部署單元 2.作為第三方的組裝單元 3.沒(méi)有(外部的)可見(jiàn)狀態(tài) | 1.一個(gè)實(shí)例單元,具有唯一的標(biāo)識(shí) 2.可能具有狀態(tài),此狀態(tài)外部可見(jiàn) 3.封裝了自己的狀態(tài)和行為 | 結(jié)構(gòu)化開(kāi)發(fā)的產(chǎn)物 |
沒(méi)有外部的可見(jiàn)狀態(tài)就是,直接從外部不能訪問(wèn),一般提供統(tǒng)一訪問(wèn)的入口。對(duì)象如果沒(méi)有封裝好的話,外部是可以訪問(wèn)的,如果封裝好的話,也能做到統(tǒng)一入口訪問(wèn),這樣安全性和可靠性會(huì)更高。
構(gòu)件系統(tǒng)架構(gòu)的特性(了解,不怎么重要)
構(gòu)件系統(tǒng)體系結(jié)構(gòu)由一組平臺(tái)決策,一組構(gòu)件框架和構(gòu)件框架之間的互操作設(shè)計(jì)組成。
構(gòu)件框架是一種專用的體系結(jié)構(gòu)(通常圍繞一些關(guān)鍵的機(jī)制),同時(shí),也是一組固定的作用于構(gòu)件層次機(jī)制的策略。 概念框架的互操作設(shè)計(jì)包括系統(tǒng)體系結(jié)構(gòu)連接的所有框架的互操作的規(guī)則。
構(gòu)件是一組通常需要同時(shí)部署的原子構(gòu)件,構(gòu)件和原子構(gòu)件之間的區(qū)別在于,大多數(shù)原子構(gòu)件永遠(yuǎn)不會(huì)單獨(dú)被部署,盡管它們可以被單獨(dú)部署。
一個(gè)原子構(gòu)件是一個(gè)模塊和一組資源。模塊是一組類和可能的非面向?qū)ο蟮慕Y(jié)構(gòu)體,比如過(guò)程或者函數(shù)。資源是一個(gè)類型化的項(xiàng)的固定集合。
資源可以包含代碼,進(jìn)而包含模塊,問(wèn)題在于除了編譯器編譯一個(gè)模塊或包生成的資源外,還可能存在其他的資源。在純對(duì)象的方法中,資源是外部化的不可改變的對(duì)象。不可改變是因?yàn)闃?gòu)件沒(méi)有持久化標(biāo)志,而且賦值不能被區(qū)分
構(gòu)件的復(fù)用
假設(shè)我們要利用構(gòu)件的思想開(kāi)發(fā)一套系統(tǒng),首先我們要經(jīng)歷這樣一個(gè)流程:檢索于提取構(gòu)件--->理解于評(píng)價(jià)構(gòu)件--->修改構(gòu)件--->組裝構(gòu)件.
檢索于提取構(gòu)件
- 檢索于提取構(gòu)件
一般是已經(jīng)有了一些構(gòu)件,但是標(biāo)準(zhǔn)化程度不是很高,此時(shí)需要先去找到構(gòu)件
然后把構(gòu)件提取出來(lái)
檢索和提取構(gòu)件有幾種方式
- 基于關(guān)鍵字的檢索
系統(tǒng)在圖形用戶界面上將構(gòu)件庫(kù)的關(guān)鍵字呈樹(shù)形結(jié)構(gòu)直觀的展示給用戶,復(fù)用者通過(guò)對(duì)樹(shù)形結(jié)構(gòu)的逐級(jí)瀏覽,尋找需要的關(guān)鍵字并提取相應(yīng)的構(gòu)件.
- 刻面檢索法
該方法基于刻面分類法,由三步構(gòu)成,分別是構(gòu)造查詢,檢索構(gòu)件和對(duì)構(gòu)件進(jìn)行排序.優(yōu)點(diǎn)是易于查找相似構(gòu)件,但構(gòu)造查詢時(shí)比較麻煩.
- 超文本檢索法
復(fù)用者先給出一個(gè)或多個(gè)關(guān)鍵字,系統(tǒng)在構(gòu)件的說(shuō)明文檔中進(jìn)行精確或模糊的匹配,匹配成功夠列出相應(yīng)構(gòu)件說(shuō)明. 優(yōu)點(diǎn)是對(duì)用戶友好,但有時(shí)候難以在瀏覽過(guò)程中找到正確的那部分構(gòu)件.
提取構(gòu)件之后,需要理解和評(píng)價(jià)構(gòu)件
理解于評(píng)價(jià)構(gòu)件
檢索于提取構(gòu)件--->理解于評(píng)價(jià)構(gòu)件--->修改構(gòu)件--->組裝構(gòu)件.
- 理解于評(píng)價(jià)構(gòu)件
要復(fù)用構(gòu)件,準(zhǔn)確的理解構(gòu)件是至關(guān)重要的.特別是您要使用或修改這個(gè)構(gòu)件時(shí).
為達(dá)到目的,必須要求構(gòu)件的開(kāi)發(fā)遵循公共標(biāo)準(zhǔn)
一般構(gòu)件庫(kù)的文檔中全面而準(zhǔn)確的說(shuō)明了構(gòu)件的功能與行為,相關(guān)的領(lǐng)域知識(shí),可適應(yīng)性約束條件和例外情形,可預(yù)見(jiàn)的修改部分及修改方法.
當(dāng)您理解這個(gè)構(gòu)件是怎么一回事了,它能不能達(dá)到我們的要求,是不是完全匹配我們的需求, 假設(shè)這個(gè)構(gòu)件不能完全滿足需求,有些功能有,有些沒(méi)有,此時(shí)就需要修改構(gòu)件了.
修改構(gòu)件
檢索于提取構(gòu)件*--->理解于評(píng)價(jià)構(gòu)件--->修改構(gòu)件--->組裝構(gòu)件.
- 修改構(gòu)件
理想狀態(tài)是直接復(fù)用現(xiàn)成的構(gòu)件,但多數(shù)情況下,都必須對(duì)構(gòu)件進(jìn)行或多或少的修改,以應(yīng)對(duì)新需求.
為了減少構(gòu)件的修改工作量,要求開(kāi)發(fā)人員盡量使構(gòu)件的功能,行為和接口設(shè)計(jì)更加抽象化,通用化和參數(shù)化.這樣,復(fù)用者可通過(guò)參數(shù)選取來(lái)調(diào)整構(gòu)件的功能或行為.如果仍不滿足需求,必須借助設(shè)計(jì)信息和文檔來(lái)修改構(gòu)件.
構(gòu)件庫(kù)中若無(wú)可修改使用的構(gòu)件,則按新需求開(kāi)發(fā)構(gòu)件,并存入構(gòu)件庫(kù).
當(dāng)所有的構(gòu)件都開(kāi)發(fā)或修改完成之后,我們就可以把構(gòu)件組裝起來(lái),完成我們的需求.
組裝構(gòu)件
檢索于提取構(gòu)件*--->理解于評(píng)價(jià)構(gòu)件--->修改構(gòu)件--->組裝構(gòu)件.
- 組裝構(gòu)建
基于功能的組裝技術(shù)
基于功能的組裝技術(shù)采用子程序調(diào)用和參數(shù)傳遞的方式將構(gòu)件組裝起來(lái).就是我們模塊于模塊之間的調(diào)用于組裝.
基于數(shù)據(jù)的組裝技術(shù)
- 根據(jù)當(dāng)前軟件問(wèn)題的核心數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)出一個(gè)框架,然后根據(jù)框架中各個(gè)節(jié)點(diǎn)的需求提取構(gòu)件并進(jìn)行適應(yīng)性修改,再將構(gòu)件逐個(gè)分配至框架中的適當(dāng)位置.后面,組裝方式仍然跟傳統(tǒng)方式一樣,也就是子程序調(diào)用于參數(shù)傳遞.
面向?qū)ο蟮慕M裝技術(shù)
- 由于封裝和繼承的特性,面向?qū)ο蠓椒ū绕渌浖_(kāi)發(fā)方法更適合支持軟件復(fù)用.如果滿足需求,直接復(fù)用,如果不滿足,必須以基類作為父類,生成對(duì)應(yīng)的子類,以滿足新系統(tǒng)的需求.
而在組裝過(guò)程中有可能會(huì)存在一些失配的問(wèn)題,包括如下一些問(wèn)題:
- 由構(gòu)建引起的失配,包括由于系統(tǒng)對(duì)構(gòu)件基礎(chǔ)設(shè)施,構(gòu)件控制模型和構(gòu)件數(shù)據(jù)模型的假設(shè)存在沖突引起的失配。
- 由連接子引起的失配,包括由于系統(tǒng)對(duì)構(gòu)件交互協(xié)議,連接子數(shù)據(jù)模型的假設(shè)存在沖突引起的失配
- 由系統(tǒng)成分對(duì)全局體系結(jié)構(gòu)的假設(shè)存在沖突引起的失配等。
要解決失配問(wèn)題,首先要檢測(cè)出失配問(wèn)題,并在此基礎(chǔ)上通過(guò)適當(dāng)?shù)氖侄蜗龣z測(cè)出的失配問(wèn)題。
小結(jié)
構(gòu)件的一些基本概念就大概這些,這些概念我們還是要結(jié)合實(shí)際情況去理解它,不然這么枯燥的知識(shí)海洋,當(dāng)我們時(shí)刻都用蠻力去遨游時(shí),總會(huì)有精疲力竭之時(shí)。 學(xué)無(wú)止境,加油!