當前位置: 妍妍網 > 碼農

這種架構,沒有程式設計師不知道吧?

2024-02-25碼農

大家好,我是魚皮。開發後端計畫時,我們最常見的一種架構模式就是 分層架構

所謂的分層架構,就是把系統自上而下分為多個不同的層,每一層都有特定的功能和職責,且只和自己的直接上層與直接下層 「打交道」。

分層架構的優點是:每一層都有明確定義的職責,易於理解和維護;而且各層可以獨立擴充套件,以適應不同的需求。

所以分層架構也是最適合新手入門學習、並且實際開發中套用最多的架構。

分層架構

下面給大家一種 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 框架的計畫基本都使用了分層架構。

    實踐

    想了解更多常見的後端架構設計,推薦閱讀這篇文章:

    編程導航星球的所有後端計畫基本都使用了經典分層架構,隨便實踐一個計畫都能學會這種架構方式。

    👇🏻 點選下方閱讀原文,獲取編程導航原創計畫教程系列

    往期推薦