所謂軟體架構,指的是軟體系統的整體結構,包括軟體子元素,這些元素的外部屬性以及元素元素之間的關系。
這個定義包含了以下三層意思:
(1)軟體架構是對系統的抽象。它不僅規定了系統有哪些主要軟體元素或子產品,還定義了這些元素之間是如何互動的。它并不暴露每個元素的内部屬性(也叫局部資訊),也就是說每個子子產品的私有資訊是不劃歸到軟體架構的範疇的。需要注意的是,每個元素的外部屬性依然是軟體架構的一部分。這裡所謂的外部屬性,指的是一個元素對其他元素所承擔的責任實體,包括:提供的服務,所需的服務,性能特征,錯誤處理以及資源的使用。
軟體元素,一般分為元件,連接配接器和資料三種。一個元件是軟體指令和内部狀态的一個抽象單元,通過其接口提供對于資料的轉換。一個連接配接器是對于元件之間的通訊、協調或者合作進行仲裁的一種機制。一個資料是元件通過一個連接配接器接收或發送的資訊元素。
資料的例子包括位元組序列,消息,編碼過的參數以及序列化過的對象,但不包括那些永久駐留或元件的私有資訊。連接配接器的例子包括RPC遠端過程調用、消息傳遞協定和資料流等。
(2)每個軟體系統都有一個架構。每個系統都是由一個或多個元素組成,并且這些元素之間都存在一定的關系。隻有一個元素的系統是最簡單的一種情況。
(3)系統可能有多個視圖。從不同的角度,系統可能獲得不同的結構表示圖。單單其中一個視圖無法代表軟體架構。軟體架構是所有這些視圖的總和。在一般情況下,你可以選擇其中一個或幾個結構視圖用以對軟體系統進行分析,了解或團隊間溝通。
軟體架構勾畫了一個公用的框圖,可供不同的人參閱,學習和了解。這使得我們對軟體系統的了解和溝通更為順暢,具體展現為:
(1)與使用者讨論和協商軟體需求;
(2)讓客戶及時了解我們的軟體開發進展及大緻成本;
(3)對實施管理層的決定和人力調配起到一定幫助作用。
一方面,軟體架構對具體的軟體的實作是描述性的,但另一方面,它對軟體實作也是有限制性作用的。描述性可以幫助團隊更好的了解軟體系統,限制性可以對軟體的設計和編碼做出一定的限制。系統性的資源配置設定決定對子元素的實作也起到一定的限制作用。軟體架構必須做出系統性的取舍和權衡(trade-off).
(1)可以幫助管理者在團隊内部如何劃分任務,確定每個團隊成員明确自己的職責;
(2)可以幫助管理者做人力和其他開發成本預算。
(3)可以幫助組織開發文檔。
(4)可以對軟體的內建起到幫助作用;
包括但不限于:安全性、可擴充性、可修改性、可重用性、性能等
軟體架構把變化歸為三類:
(1)局部性變化。如,修改單個子元素或元件;
(2)大範圍變化。如,多個元件需要被修改;
(3)架構性變化。如修改整個系統拓撲視圖,修改元件之間的通信模式或變更元素間的協調機制。
一個好的軟體架構,一定是在改動最少的情況下,能夠很好的自适應各種變化。
(1)如建築領域一樣,軟體架構應充當一個架構的作用。我們可以往架構填充軟體元件。也就是說,軟體元素是可以作為插件內建到系統裡的;
(2)通過把某些軟體功能劃分到某個或某幾個軟體元素,我們可以分而治之,各個擊破;
(3)可以提前通過架構分析出哪些軟體元素可能對項目的成功存在風險,進而對資源配置設定進行調整。
某個軟體産品線,一般隻有一個軟體架構。但一個軟體架構不應該隻能适用于某個系統,它應該是一個模型,可以為多個系統和多種系統服務。軟體設計者和開發者可以重用這些模型,受益于該模型,并将它運用到其他軟體産品線