一個軟件架構(gòu)是一個軟件系統(tǒng)在其某個階段運行時(run-time)所有元素的抽
象。一個系統(tǒng)可能由很多層抽象和很多個操作階段組成,每個抽象和操作階段都
有自己的軟件架構(gòu)。
軟件架構(gòu)的核心是抽象原則:通過封裝來隱藏系統(tǒng)的一些細節(jié),從而更好地識別和支持系統(tǒng)的屬性
現(xiàn)代軟件架構(gòu)的核心是:組件、連接器、數(shù)據(jù)。組件是在運行時執(zhí)行某種功能的軟件單元。這樣的例子有程序、對象、進程、過濾器。
軟件架構(gòu)(software architecture)是軟件系統(tǒng)在運行時的抽象,而軟件結(jié)構(gòu)(software structure)則是靜態(tài)源代碼的屬性.將軟件架構(gòu)和源代碼結(jié)構(gòu)分離開來是為了更好的關(guān)注軟件運行時的特性,這些特性不依賴于一個特定的組件實現(xiàn).
設(shè)計文檔是運行時系統(tǒng)的一部分?系統(tǒng)運行起來后,設(shè)計文檔在軟件架構(gòu)中不扮演任何角色。大樓的圖紙燒毀了,但是大樓還在。
對于基于網(wǎng)絡(luò)的應(yīng)用而言,數(shù)據(jù)元素在系統(tǒng)中的位置和移動常常是系統(tǒng)行為唯一至
關(guān)重要的決定因素.
組件
一個組件是軟件指令和內(nèi)部狀態(tài)的一個抽象單元,通過其接口提供對于數(shù)據(jù)的轉(zhuǎn)
換。軟件組件就是擁有接口、其接口形式對外表現(xiàn)或者展示的一個具有一定獨立功能的軟件單元。軟件組件必須擁有接口,否則不能成為組件,或者這樣的組件是沒有任何用處的。
組件是軟件指令和內(nèi)部狀態(tài)的一個抽象單元,通過其接口提供對于數(shù)據(jù)的轉(zhuǎn)換。轉(zhuǎn)換的例子包括從二級存儲將數(shù)據(jù)加載到內(nèi)存、執(zhí)行一些運算、轉(zhuǎn)換為另外一種格式、使用其他數(shù)據(jù)來封裝等等。每個組件的行為是架構(gòu)的一部分,能夠被其他組件觀察到(observed)或看到(discerned)換句話說,組件應(yīng)該由它為其他組件提供的接口和服務(wù)來定義,而不第1章軟件架構(gòu)12由它在接口之后的實現(xiàn)來定義。Parnas 將此定義為其他架構(gòu)元素能夠?qū)υ摻M件作出的一組假設(shè)。
連接器 一個連接器是對于組件之間的通訊、協(xié)調(diào)或者合作進行仲裁的一種抽象機制。 連接器的例子包括共享的表述、遠程過程調(diào)用、消息傳遞協(xié)議和數(shù)據(jù)流。 連接器通過將數(shù)據(jù)元素從它的一個接口轉(zhuǎn)移(transferring)到另一個接口而不改變數(shù)據(jù),來支持組件之間的通信。在其內(nèi)部,一個連接器可以包含一個由組件組成的子系統(tǒng),為了轉(zhuǎn)移的目的對數(shù)據(jù)進行某種轉(zhuǎn)換、執(zhí)行轉(zhuǎn)移、然后做相反的轉(zhuǎn)換并交付與原始數(shù)據(jù)相同的結(jié)果。
傳輸數(shù)據(jù)應(yīng)該是鏈接器最重要的任務(wù)。包括客戶有意義的實體數(shù)據(jù)、組件交互的交互協(xié)議數(shù)據(jù)。對于數(shù)據(jù)傳輸方向的選擇和目的數(shù)據(jù)方向的不同,連接器可以對接受的數(shù)據(jù)進行不同的轉(zhuǎn)換。這個轉(zhuǎn)換應(yīng)該由連接器內(nèi)部的組件來完成。
數(shù)據(jù) 數(shù)據(jù)是組件通過一個連接器接收或發(fā)送的信息元素。數(shù)據(jù)的例子包括字節(jié)序列、消息、編碼過的參數(shù)、以及序列化過的對象,但是不包括那些永久駐留或隱藏在組件中的信息。 在軟件架構(gòu)中,數(shù)據(jù)其實是一種流動的消息。在基于網(wǎng)絡(luò)結(jié)構(gòu)的設(shè)計中,數(shù)據(jù)是最重要的概念。你要選擇兩種模式:是在遠程直接連接組件進行交互,還是將組件傳遞到本地在本地空間中進行交互。
|