《軟件架構》N 層架構

原文連接 譯文連接 譯者:楊逸林 校對:方騰飛html

N 層架構意味着將系統拆分爲 N 層,N ∈ [1,+∞)。單層架構與單進程架構同樣。雙層架構和客戶端/服務端架構同樣等等。 三層架構是一種很是常見的架構。三層架構一般分爲表現層/GUI 層、業務邏輯層以及數據持久化層。下圖說明了三層架構: N 層架構.png前端

表現層/GUI 層包含應用的用戶接口。表現層是「啞吧」,意味着它不包含任何業務邏輯。它只是將用戶的行爲轉發到業務邏輯層。若是用戶須要輸入信息(例如表單信息),這個能夠在表現層中完成。java

業務邏輯層作出全部應用程序決策,這就是「業務邏輯」所在的位置。業務邏輯層知道什麼是可能的,什麼是容許的等等。業務邏輯層在數據持久化層中讀取和存儲數據。 數據持久化層被用在應用程序中存儲數據。react

數據持久化層一般能夠安全地存儲數據,執行事務,快速搜索大量數據等。spring

Web 和移動應用

Web 應用是很是常見的三層應用程序。表現層由 HTML,CSS 和 JavaScript 組成,業務邏輯層以 Java Servlet/JSP,ASP,.NET,PHP,Ruby,Python 等形式在 Web 服務器上運行,數據持久化層由某些數據庫(例如 MySQL、PostgreSQL、NoSQL 數據庫等)組成。下圖是一個典型的三層 Web 應用圖: 三層 Web 應用架構.png 事實上,對於不是單機的移動應用,這是相同的原理。鏈接到服務器的移動應用程序一般鏈接到 Web 服務器併發送和接收數據。下面是典型的三層移動應用程序的示意圖: 三層 Web 應用架構升級版.png 數據庫

富互聯網應用程序(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

具體的能夠看《微服務架構設計模式》這本書

原創文章,轉載請註明: 轉載自併發編程網 – ifeve.com本文連接地址: 《軟件架構》N 層架構

FavoriteLoading添加本文到個人收藏
相關文章
相關標籤/搜索