聲明:本欄目所使用的素材都是凱哥學堂VIP學員所寫,學員有權匿名,對文章有最終解釋權;凱哥學堂旨在促進VIP學員互相學習的基礎上公開筆記。web
三層架構模式介紹
三層架構模式:
三層架構(3-tier architecture) 一般意義上的三層架構就是將整個業務應用劃分爲:界面層(User Interface layer)、業務邏輯層(Business Logic Layer)、數據訪問層(Data access layer)。區分層次的目的即爲了 「高內聚低耦合」 的思想。在軟件體系架構設計中,分層式結構是最多見,也是最重要的一種結構。微軟推薦的分層式結構通常分爲三層,從下至上分別爲:數據訪問層、業務邏輯層(又或稱爲領域層)、表示層。數據庫
表示層:
界面層也稱爲表示層,位於最外層(最上層),離用戶最近。用於顯示數據和接收用戶輸入的數據,爲用戶提供一種交互式操做的界面。編程
業務邏輯層:
業務邏輯層(Business Logic Layer)無疑是系統架構中體現核心價值的部分。它的關注點主要集中在業務規則的制定、業務流程的實現等與業務需求有關的系統設計,也便是說它是與系統所應對的領域(Domain)邏輯有關,不少時候,也將業務邏輯層稱爲領域層。例如Martin Fowler在《Patterns of Enterprise Application Architecture》一書中,將整個架構分爲三個主要的層:表示層、領域層和數據源層。做爲領域驅動設計的先驅Eric Evans,對業務邏輯層做了更細緻地劃分,細分爲應用層與領域層,經過分層進一步將領域邏輯與領域邏輯的解決方案分離。 業務邏輯層在體系架構中的位置很關鍵,它處於數據訪問層與表示層中間,起到了數據交換中承上啓下的做用。因爲層是一種弱耦合結構,層與層之間的依賴是向下的,底層對於上層而言是「無知」的,改變上層的設計對於其調用的底層而言沒有任何影響。若是在分層設計時,遵循了面向接口設計的思想,那麼這種向下的依賴也應該是一種弱依賴關係。於是在不改變接口定義的前提下,理想的分層式架構,應該是一個支持可抽取、可替換的「抽屜」式架構。正由於如此,業務邏輯層的設計對於一個支持可擴展的架構尤其關鍵,由於它扮演了兩個不一樣的角色。對於數據訪問層而言,它是調用者;對於表示層而言,它倒是被調用者。依賴與被依賴的關係都糾結在業務邏輯層上,如何實現依賴關係的解耦,則是除了實現業務邏輯以外留給設計師的任務。json
數據訪問層:
數據訪問層,有時候也稱爲是持久層,其功能主要是負責數據庫的訪問,能夠訪問數據庫系統、二進制文件、文本文檔或是XML文檔。簡單的說法就是實現對數據表的select、insert、update以及delete的操做。若是要加入ORM的元素,那麼就會包括對象和數據表之間的mapping,以及對象實體的持久化。小程序
三層與MVC的區別:
不少人容易把三層模式與MVC模式混淆,三層與MVC的最不一樣的地方在於三層是沒有Controller控制器的概念。雖然一樣是架構級別的,三層與MVC相同的地方在於他們都有一個表現層,可是他們不一樣的地方在於其餘的兩個層。MVC沒有把業務的邏輯訪問當作兩個層,這是採用三層架構或MVC搭建程序最主要的區別。固然了,在三層中也提到了Model概念,可是三層架構中Model的概念與MVC中Model的概念是不同的,「三層」 中典型的Model層是以實體類構成的,而MVC裏,則是由業務邏輯與訪問數據組成的。微信小程序
在三層中JSP與Servlet代碼都屬於表示層,業務邏輯層則是完成業務規則的實體類,數據訪問層則是JDBC等代碼,示意圖:服務器
三層架構把不一樣層的業務職責分離得更加完全,邏輯層不包含一丁點的視圖層代碼,一樣的數據層也不該該包含一丁點的邏輯層代碼,由於若是包含了其餘層的代碼就不能作到徹底解耦,依舊存在必定程度的耦合性。微信
三層架構更好的實現了模塊化編程,使用三層架構設計的系統更容易擴展、更換,特別是現在不止pc端一種設備,若是沒作好分層就沒法適應多設備的訪問。例如表示層咱們使用jsp+Servlet作的,面向的是web,若是哪天不作web了,要把整個表示層更換成桌面的圖形化來顯示,那麼使用了三層架構的話,只須要更換表示層便可,邏輯層和數據層均可以進行復用。若是沒有進行分層的話,各個模塊都耦合在一塊兒就沒法進行復用,只能從新再編寫一個適應桌面的系統出來,這樣就很耗時耗力了。架構
咱們都知道WebService是一種跨編程語言和跨操做系統平臺的遠程調用技術,若是一個系統是使用三層架構進行設計的,那麼邏輯層就能夠經過WebService共享給其餘不一樣語言編寫的應用程序調用。app
最近流行的微信小程序是經過https訪問服務器的,它須要服務器返回json數據,那麼咱們就能夠在視圖層中的Servlet接收這個訪問,處理完成後返回json數據。
示意圖:
三層開發模式的優缺點
優勢:
一、開發人員能夠只關注整個結構中的其中某一層;
二、能夠很容易的用新的實現來替換原有層次的實現;
三、能夠下降層與層之間的依賴;
四、有利於標準化;
五、利於各層邏輯的複用。
六、結構更加的明確
七、在後期維護的時候,極大地下降了維護成本和維護時間
缺點:
一、下降了系統的性能。這是不言而喻的。若是不採用分層式結構,不少業務能夠直接造訪數據庫,以此獲取相應的數據,現在卻必須經過中間層來完成。
二、有時會致使級聯的修改。這種修改尤爲體如今自上而下的方向。若是在表示層中須要增長一個功能,爲保證其設計符合分層式結構,可能須要在相應的業務邏輯層和數據訪問層中都增長相應的代碼。
好比,一家飯店添加了同樣菜, 那個菜單(UI) , 廚師(BLL) , 採購(DAL) 都要進行相應的處理