?1.軟件體系結構
? ? ? ? 軟件體系結構可定義為:軟件體系結構為軟件系統提供了結構、行為和屬性的高級抽象,由構成系統的元素描述、這些元素的相互作用、指導元素集成的模式以及這些模式的約束組成。軟件體系結構不僅指定了系統的組織結構和拓撲結構,并且顯示了系統需求和構成系統的元素之間的對應關系,提供了一些設計決策的基本原理,是構建于軟件系統之上的系統級復用。
? ? ? ? 軟件體系結構貫穿于軟件研發的整個生命周期內,具有重要的影響。這主要以下三個方面來進行考察。
? ? ? ? (1)利益相關人員之間的交流。軟件體系結構是一種常見的系統抽象,代碼級別的系統抽象僅僅可以成為程序員的交流工具,而包括程序員在內的絕大多數系統的利益相關人都借助軟件體系結構來作為相互溝通的基礎。
? ? ? ? (2)系統設計的前期決策。軟件體系結構是我們所開發的軟件系統最早期設計決策的體現,而這些早期決策對軟件系統的后續開發、部署和維護具有相當重要的影響。這也是能夠對系統進行分析的最早時間點。
? ? ? ? (3)可傳遞的系統級抽象。軟件體系結構是關于系統構造以及系統各個元素工作機制的相對較小、卻又能夠突出反映問題的模型。由于軟件系統具有的一些共通特性,這種模型可以在多個系統之間傳遞,特別是可以應用到具有質量屬性和功能需求的系統中,并能夠促進大規模軟件的系統級復用。
2.分層式體系結構?
? ? ? ? 分層式體系結構是一種最常見的架構設計方法,能有效地使設計簡化,使設計的系統結構清晰,便于提高復用能力和產品維護能力。?
? ? ? ? 層次式體系結構設計是將系統組成一個層次結構,每一層為上層服務,并作為下層客戶。在一些層次系統中,除了一些精心挑選的輸出函數外,內部的層接口只對相鄰的層可見。連接件通過決定層間如何交互的協議來定義,拓撲約束包括對相鄰層間交互的約束。由于每一層最多只影響兩層,同時只要給相鄰層提供相同的接口,允許每層用不同的方法實現,同樣為軟件重用提供了強大的支持。
? ? ? ? 軟件層次式體系結構是最通用的架構,也被叫作N層架構模式(n-tier?architecture?pattern)。
這也是Java EE(也稱為J2EE)應用經常采用的標準模式。這種架構模式非常適合傳統的IT通信和組織結構,很自然地成為大部分與應用的第一架構選擇。在分層次體系結構中組件被劃分成幾個層,每個層代表應用的一個功能,都有自己特定的角色和職能。分層架構本身沒有規定要分層多少層,大部分的應用會分成表現層(或稱為展示層)、中間層(或稱為業務層)、數據訪問層(或稱為持久層)和數據層。其結構見圖1所示。? ? ??
? ? ? ? ?圖1?常用的層次式架構
? ? ? ? 分層架構的一個特性就是關注分離(seperation?of?concerns)。該層中的組件只負責本層的邏輯,組件的劃分很容易明確組件的角色和職責,也比較容易開發、測試、管理和維護。
3.層次式體系結構的注意點?
? ? ? ? ?層次式體系結構是一個可靠的通用的架構,對很多應用來說,如果不確定哪種架構適合,可以用它作為一個初始架構。但是,設計時要注意以下兩點:
? ? ? ? (1)要注意的是污水池反模式。
? ? ? ? 所謂污水池反模式(architecture?sinkhole?anti-pattern),就是請求流簡單地穿過幾個層,每層里面基本沒有做任何業務邏輯,或者做了很少的業務流程。比如一些JavaEE例子,業務邏輯層只是簡單地調用了持久層的接口,本身沒有什么業務邏輯。
? ? ? ? 每一層或多或少都有可能遇到這樣的場景,關鍵是分析這樣的請求百分比是多少。二八原則可以幫助你決定是否正在遇到污水池反模式。如果請求超過20%,則應該考慮讓一些層變成開放的。
? ? ? ? (2)需要考慮的是分層架構可能會讓你的應用變得龐大。
? ? ? ? 即使你的表現層和中間層可以獨立發布,但它的確會帶來一些潛在的問題,比如:分布式復雜、健壯性下降、可靠性和性能的不足,以及代碼規模的膨脹等。