參考:http://www.ruanyifeng.com/blog/2016/09/software-architecture.htmlhtml
https://blog.csdn.net/bboyfeiyu/article/details/45136299程序員
https://www.cnblogs.com/zdxster/p/5305155.htmlweb
1. 什麼是分層架構數據庫
分層架構是一種很常見的架構模式,它也叫N層架構。這種架構是大多數Jave EE應用的實際標準,所以不少的架構師,設計師,還有程序員都知道它。許多傳統IT公司的組織架構和分層模式十分的類似。因此它很天然的成爲大多數應用的架構模式。設計模式
2. 模式分析架構
分層架構模式裏的組件被分紅幾個平行的層次,每一層都表明了應用的一個功能(展現邏輯或者業務邏輯)。儘管分層架構沒有規定自身要分紅幾層幾種,大多數的結構都分紅四個層次:展現層,業務層,持久層,和數據庫層。有時候,業務層和持久層會合併成單獨的一個業務層,尤爲是持久層的邏輯綁定在業務層的組件當中。所以,有一些小的應用可能只有3層,一些有着更復雜的業務的大應用可能有5層或者更多的分層。jsp
分層架構中的每一層都有着特定的角色和職能。測試
舉個例子,展現層負責處理全部的界面展現以及交互邏輯,業務層負責處理請求對應的業務。架構裏的層次是具體工做的高度抽象,它們都是爲了實現某種特定的業務請求。好比說展現層並不須要關心怎樣獲得用戶數據,它只需在屏幕上以特定的格式展現信息。業務層並不關心要展現在屏幕上的用戶數據格式,也不關心這些用戶數據從哪裏來。它只須要從持久層獲得數據,執行與數據有關的相應業務邏輯,而後把這些信息傳遞給展現層。spa
分層架構的一個突出特性是組件間關注點分離 (separation of concerns)。一個層中的組件只會處理本層的邏輯。好比說,展現層的組件只會處理展現邏輯,業務層中的組件只會去處理業務邏輯。多虧了組件分離,讓咱們更容易構造有效的角色和強力的模型。這樣應用變的更好開發,測試,管理和維護。.net
3. 關鍵概念——層隔離
這是分層架構中很是重要的特色。這意味request必須一層一層的傳遞。舉個例子,從展現層傳遞來的請求首先會傳遞到業務層,而後傳遞到持久層,最後才傳遞到數據層。
那麼爲何不容許展現層直接訪問數據層呢。若是隻是得到以及讀取數據,展現層直接訪問數據層,比穿過一層一層來獲得數據來的快多了。這涉及到一個概念:層隔離。
層隔離就是說架構中的某一層的改變不會影響到其餘層:這些變化的影響範圍限於當前層次。若是展現層可以直接訪問持久層了,假如持久層中的SQL變化了,這對業務層和展現層都有必定的影響。這隻會讓應用變得緊耦合,組件之間互相依賴。這種架構會很是的難以維護。
從另一個方面來講,分層隔離使得層與層之間都是相互獨立的,架構中的每一層的互相瞭解都不多。爲了說明這個概念的厲害之處,想象一個超級重構,把展現層從JSP換成JSF。假設展現層和業務層的之間的聯繫保持一致,業務層不會受到重構的影響,它和展現層所使用的界面架構徹底獨立。
然而封閉的架構層次也有不便之處,有時候也應該開放某一層。若是想往包含了一些由業務層的組件調用的普通服務組件的架構中添加一個分享服務層。在這個例子裏,新建一個服務層一般是一個好主意,由於從架構上來講,它限制了分享服務訪問業務層(也不容許訪問展現層)。若是沒有隔離層,就沒有任何架構來限制展現層訪問普通服務,難以進行權限管理。
開放和封閉層的概念肯定了架構層和請求流之間的關係,而且給設計師和開發人員提供了必要的信息理解架構裏各類層之間的訪問限制。若是隨意的開放或者封閉架構裏的層,整個項目可能都是緊耦合,一團糟的。之後也難以測試,維護和部署。
4. 分層架構與MVC之間的區別
我相信不少人都會對這兩個概念模糊,下面咱們來分析一下這二者之間的區別與聯繫。
三層架構是一個分層式的軟件體系架構設計,它可適用於任何一個項目。
MVC是一個設計模式,它是根據項目的具體需求來決定是否適用於該項目。
那麼架構跟設計模式有什麼區別呢?
咱們從接手一個項目開始,首先,咱們須要進行架構設計,通常咱們採用的就是分層式的架構設計,即咱們的三層架構。而後,在肯定了架構之後,咱們再根據項目的具體需求去考慮是否須要應用一些設計模式,好比是否應用咱們的MVC模式,抽象工廠模式等等。最後,肯定了模式之後,就是咱們的一些具體的實現了。
其次,它倆劃分的層次不一樣。
三層架構將整個項目劃分爲:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。
MVC 即Model(模型),View(視圖),Controller(控制)。
下面看一下它們的區別與聯繫:
而咱們一般所見到的MVC通常也都是在應用三層架構的基礎上,即將Model層再進行分層。而若是Model再也不進行劃分的話,那麼使用MVC的意義也就不大了。
而後,它倆的目的着重點不一樣。
三層架構的目的着重點是「高內聚,低耦合」,即解耦。
MVC的目的則是實現Web系統的職能分工,即職責劃分。
其實職責劃分也是解耦,可是三層側重的是總體的一個解耦,而MVC側重的是web系統的解耦,即側重jsp和Servlet的一個解耦。
MVC和三層架構MVC與三層架構相似麼?
三層架構是典型的架構模式(Architecture Pattern),三層架構的分層模式是典型的上下關係,上層依賴於下層。但MVC做爲表現模式是不存在上下關係的,而是相互協做關係。即便將MVC看成架構模式,也不是分層模式。MVC和三層架構基本沒有可比性,是應用於不一樣領域的技術。