在系統的分層組織方式下,上層通過介面使用下層定義的各種服務,下層對上層一無所知。每一層都對自己的上層隱藏其下層的細節,因此第4層無需知道第2層的細節。
分層的好處:
1.可以專註理解某一層,無需過多瞭解其他層次;
2.可以替換某層的具體實現,只要前後提供的服務(介面)相同即可;
3.可以將層次間的依賴性減到最低。如果第2層改變了,只要第3層不變,第4層及以上各層都無需改變;
4.分層有利於標準化工作。行業標準自不必說,即使企業、項目內部也可以據此進行標準化;
5.對於構建良好的層次,其上層調用和表現形式可以多樣化。
分層的缺點:
1.層次並不能封裝所有的東西,有時會帶來級聯修改。例如要在介面上增加顯示的資料項目,則需要在資料庫中增加欄位,中間的每一層都會因此改變;
2.過多的分層可能會影響效能。
分層中最困難的問題是確定建立哪些層次,以及每個層次的功能職責。
分層中常用的兩個詞語是Layer和Tier,通常將Tier理解為物理上的分離,而Layer則更多表示邏輯上的分離。
三個基本的層次是:表現層、領域層、資料來源層。
1.表現層是系統為外界提供服務的介面。通常處理使用者與軟體之間的互動,向使用者顯示資訊並將從使用者那裡擷取的資訊解釋成領域層或資料來源層上的各種操作;也可能是為其他系統或軟體提供服務,如WebService等;
2.資料來源層是系統從外界擷取服務的介面。主要處理與其他系統的互動,可以是事務監控器、其他應用、訊息系統,最常用的則是資料庫;
3.領域層(業務層)處理業務相關邏輯,是表現層與資料來源層溝通的橋樑。主要職責包括資料驗證、運算,以及為表現層提供服務並調用資料來源層的服務。
如何分層取決於應用的複雜程度:
1.對於簡單應用,可以在子程式層級進行分層,不同的子程式分別處理介面操作、資料存取和資料處理;
2.對於稍複雜的應用,可以在類層級進行分層;
3.對於更複雜的情況,則需要在模組層級進行分層。
關於分層依賴性的普遍原則:領域層和資料來源層絕對不要依賴於表現層!
區分領域邏輯比較困難,可用的測試方法是:考慮向系統中增加完全不同的新層、考慮替換資料來源格式等,將會劇烈變化的處理邏輯放入領域層中。
在系統部署的時候,需要考慮各層如何部署。需要考慮的因素包括系統響應性、網路連接、資料同步、用戶端升級維護、瀏覽器安全色性等。
系統開發時需要防備的複雜性增壓器:分散式處理、顯式多線程、範型差異、多平台協同開發、極限效能要求。