大家好,我是魚皮。開發後端計畫時,我們最常見的一種架構模式就是
分層架構
。
所謂的分層架構,就是把系統自上而下分為多個不同的層,每一層都有特定的功能和職責,且只和自己的直接上層與直接下層 「打交道」。
分層架構的優點是:每一層都有明確定義的職責,易於理解和維護;而且各層可以獨立擴充套件,以適應不同的需求。
所以分層架構也是最適合新手入門學習、並且實際開發中套用最多的架構。
分層架構
下面給大家一種 Java 企業級後端計畫開發時常用的分層架構,一般從前端界面(表示層)發送的請求出發,需要經歷接入層、控制層、業務邏輯層、通用業務層、數據存取層、系統資源層等。
表示層 通常是指讓使用者互動和檢視資訊的前端界面,比如使用者點選按鈕後能夠發送一個請求,也可以叫使用者層、界面層等。
發送請求後,會經過 接入層 ,比如 Nginx 閘道器、或者其他中介軟體,對請求做一個預處理或轉發,比如實作負載均衡。這一層不是必須存在的,通常更適用於中大型計畫,前端也可以直接請求後端。
接入層會將請求轉發到 控制層 (Controller),負責接受請求、呼叫業務邏輯層(Service)的程式碼實作功能、然後響應結果。控制層一般不建議寫復雜的業務邏輯,盡量保持精簡。
接下來是 業務邏輯層 (Service),負責處理復雜的業務邏輯,比如對請求數據進行校驗、處理、呼叫數據存取層以將結果存到資料庫中等,也是我們做系統時主要開發編碼的部份。
通用業務層 (Manager、Module)是一種特殊的業務邏輯層,主要的作用是抽取了一些需要被多個業務呼叫的公共程式碼,比如上傳檔到物件儲存、鑒權等,從而實作復用。
數據存取層 (Dao / Mapper)負責操作底層的資料來源,比如對資料庫、檔、緩存等進行增刪改查。
最後是
系統資源層
,也可以叫基礎設施層,包括各種基礎服務、系統環境等,比如資料庫、訊息佇列、Redis、檔儲存、Linux 系統、Docker 等。復雜的基礎設施可能還包括 K8S 容器資源編排、資源排程平台等。
需要註意的是,並不是所有的分層架構都需要這麽劃分,不同業務和團隊可能有自己的分層選擇與規範。
比如我帶大家開發的 ,分層架構如下:
範例計畫結構
基於分層架構,我們可以將計畫按照特定的目錄名(包名)來組織程式碼,比如:
controller:控制層
service:業務邏輯層
mapper:數據存取層
model:數據模型
還可以按照業務或檔的型別來劃分目錄,比如:
constant:常量
annotation:註解類
common:公共類
config:配置類
job:任務
exception:例外處理相關
utils:工具類
以之前帶大家做過的尋愛網計畫為例,計畫的目錄結構如圖:
其他知識
1)電腦網路也是采用了經典的分層架構,OSI 七層參考模型中,把電腦網路自底向上分為了實體層、數據鏈路層、網路層、傳輸層、會話層、表示層和套用層。每個層只處理特定的功能,比如數據傳輸、數據的路由;層與層之間透過介面(或者叫協定)進行通訊。
2)需要註意的是,我們常用的後端開發框架 Spring MVC 是基於 MVC(Model-View-Controller)設計模式構建的,而不能算是傳統的分層架構。而且一般現在的計畫中只使用 Spring MVC 作為整個計畫的控制層,不過大多數用了 Spring MVC 框架的計畫基本都使用了分層架構。
實踐
想了解更多常見的後端架構設計,推薦閱讀這篇文章:
編程導航星球的所有後端計畫基本都使用了經典分層架構,隨便實踐一個計畫都能學會這種架構方式。
👇🏻 點選下方閱讀原文,獲取編程導航原創計畫教程系列
往期推薦