N 層架構意味着將系統拆分爲 N 層,N ∈ [1,+∞)。單層架構與單進程架構同樣。雙層架構和客戶端/服務端架構同樣等等。 三層架構是一種很是常見的架構。三層架構一般分爲表現層/GUI 層、業務邏輯層以及數據持久化層。下圖說明了三層架構: 前端
表現層/GUI 層包含應用的用戶接口。表現層是「啞吧」,意味着它不包含任何業務邏輯。它只是將用戶的行爲轉發到業務邏輯層。若是用戶須要輸入信息(例如表單信息),這個能夠在表現層中完成。java
業務邏輯層作出全部應用程序決策,這就是「業務邏輯」所在的位置。業務邏輯層知道什麼是可能的,什麼是容許的等等。業務邏輯層在數據持久化層中讀取和存儲數據。 數據持久化層被用在應用程序中存儲數據。react
數據持久化層一般能夠安全地存儲數據,執行事務,快速搜索大量數據等。spring
Web 和移動應用
Web 應用是很是常見的三層應用程序。表現層由 HTML,CSS 和 JavaScript 組成,業務邏輯層以 Java Servlet/JSP,ASP,.NET,PHP,Ruby,Python 等形式在 Web 服務器上運行,數據持久化層由某些數據庫(例如 MySQL、PostgreSQL、NoSQL 數據庫等)組成。下圖是一個典型的三層 Web 應用圖: 事實上,對於不是單機的移動應用,這是相同的原理。鏈接到服務器的移動應用程序一般鏈接到 Web 服務器併發送和接收數據。下面是典型的三層移動應用程序的示意圖:
數據庫
富互聯網應用程序(Rich Internet Applications – RIA)
在第一代 Web 應用程序中,許多 HTML 以及部分 CSS 和 JavaScript 是由 Web服務器上運行的腳本生成的。當瀏覽器請求 Web 服務器上的某個頁面時,將在Web 服務器上執行腳本,該腳本爲該頁面生成 HTML,CSS 和 JavaScript。 編程
現在,世界正在轉向富互聯網應用程序(RIA)。 RIA 也使用 3 層架構,可是全部 HTML,CSS 和 JavaScript 都是在瀏覽器中生成的。瀏覽器必須下載一次初始的HTML,CSS 和 JavaScript 文件,可是以後 RIA 客戶端僅與 Web 服務器交換數據。不會來回發送 HTML,CSS 或 JavaScript(除非它是數據的一部分,就像包含 HTML 代碼的文章同樣)。json
RIA 應用程序將在軟件架構之旅的下一部分中更詳細地說明。後端
Web 應用程序的優點
N 層架構的目的是使應用程序的不一樣層彼此隔離。GUI 客戶端不知道服務端內部如何工做,服務端也不知道數據庫服務器內部如何工做等等。它們只是經過標準接口進行通訊(如前端到後端用 JSON 通訊,後端到數據庫用 SQL 通訊)。 Web 應用程序具備另外一個優點,若是你對 GUI 客戶端或服務端上運行的應用程序邏輯進行更新,則全部客戶端在下次訪問應用時都會得到最新的更新。瀏覽器下載更新過的客戶端,更新過的客戶端訪問更新過的服務端。設計模式
譯者補充
分層架構將軟件元素按「層」的方式組織。每一個層都有明肯定義的職責。分層架構還限制了層之間的依賴關係。每一層只能依賴於緊鄰其下方的層(若是嚴格分層)或其下面的任何層。
流行的三層架構是應用於邏輯視圖(4+1 視圖中的 Logic view)的分層架構。它將應用程序的類組織到如下層中:
- 表現層
- 業務邏輯層
- 數據持久化層
分層架構是架構風格的一個很好的例子,可是有一些明顯的弊端:
- 單個表現層:它沒法展示應用程序可能不單單由單個系統調用的事實。
- 單一數據持久化層:它沒法展示應用程序可能與多個數據庫進行交互的事實。
- 將業務邏輯層定義爲依賴於數據持久化層:理論上,這樣的依賴性會妨礙你在沒有數據庫的狀況下測試業務邏輯。
此外,分層架構錯誤地表示了精心設計的應用程序中的依賴關係。 六邊形架構克服了上述的一些缺點。 以下圖所示
![六邊形架構圖.png](http://static.javashuo.com/static/loading.gif)
具體的能夠看《微服務架構設計模式》這本書
原創文章,轉載請註明: 轉載自併發編程網 – ifeve.com本文連接地址: 《軟件架構》N 層架構
![Favorite Favorite](http://static.javashuo.com/static/loading.gif)
![Loading Loading](http://static.javashuo.com/static/loading.gif)