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