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