軟件架構定義的流派

「什麼是架構?若是你問五個不一樣的人,可能有會獲得五種不一樣的答案」。這是現代軟件開發之父,統一建模語言UML的建立者之一Ivar Jacobson博士曾說過的一段話。敏捷專家Martin Folwler在《企業應用架構模式》一文中,也表達了相似的見解:「不少人都試圖給架構下定義,而這些定義自己卻很難統一。」現實狀況確實如此,咱們能查到的關於軟件架構的定義,就有不少種不一樣的說法,這種混亂的狀態給咱們的開發活動和技術交流帶來了必定的麻煩,最爲典型的就是不少開發者每每把楚架構、框架以及類庫混爲一談。
    凡有爭議的東西,凡是遇到誰都不服誰的狀況,就必定會出現派別。好比中國武術中的少林、武當、峨眉、崆峒等派別;象西方繪畫藝術有什麼野獸派、印象派還有抽象派。對於軟件架構定義也一直流傳着諸多的版本,咱們大致能夠把這些版本,最終概括爲兩大流派:組成派和決策派。
    按照組成派的說法:軟件系統的架構就是用來將系統描述爲計算機組件以及組件之間的交互。Mary Shaw和David Garlan給出了更爲明確的定義:軟件架構={組件(component),鏈接件(connector),約束(constrain)}。組件能夠是獨立的程序,好比數據庫服務器,也但是子系統、框架、模塊、類等不一樣粒度的軟件單元,它們共同的特色都是承擔必定的計算職責。鏈接件能夠是過程調用、管道、RPC或者Web Service等,用於表示組件之間的相互做用。約束通常爲對象鏈接時的規則,或指明構件鏈接的形式和條件。例如,上層構件可要求下層構件的服務,反之不行;兩對象不得遞規地發送消息;代碼複製遷移的一致性約束;什麼條件下此種鏈接無效等。
    Len Bass是組成派的表明人物。按照咱們以往的經驗,但凡高人都有都有其高明之處,Len Bass也不例外,他不只繼承了組成派的觀點,還在此基礎上發揚光大,又加入了最新的元素。按照他的說法:架構等於多個結構,每一個結構又等於組件加交互,加外部可見屬性。這個定義在咱們業界當中承認度最高,又稱之爲「結構派」。
   第二大類決策派的認爲:軟件架構是軟件一些重要方面決策的集合。這種說法的典型表明是RUP中對於軟件架構的定義:
軟件架構包含了關於如下問題的重要決策:
一、 軟件系統的組織;
二、 選擇組成系統的結構元素和它們之間的接口,以及當這些元素相互協做時所體現的行爲;
三、 如何組合這些元素,使它們逐漸組成更大的子系統;
四、 用於指導這個系統組織的架構風格:這些元素以及他們的接口、協做和組合。
    軟件架構並不單單注重軟件自己的結構和行爲,還注重其它特性:功能性、性能、可擴展性、可重用性、可理解性以及美學等等。
    其實這兩個流派並不矛盾,只是描述問題的角度不一樣:結構派是從軟件自己(又稱爲軟件客體)的角度出發,用來描述軟件系統是由哪些組件組成,這些組件如何交互;決策派則是從架構師(又稱爲軟件主體)的角度出發,明確了架構師須要對哪些事情進行決策,那麼這些的決策結果就構成了軟件系統的架構。
相關文章
相關標籤/搜索