1. 程式人生 > >軟體架構原則之“分層架構”小結

軟體架構原則之“分層架構”小結

如果你不知道要用什麼架構,那就用它,可以用在業務上也可以用在技術上。這種架構將軟體分成若干個水平層,每一層都有清晰的角色和分工,不需要知道其他層的細節,層與層之間隔離通過介面通訊,序列依賴。

分層架構

核心點:

  1. 單向依賴,一層只依賴一層,不跨層
  2. 抽象隔離,分的越開越好,哪怕是異地

好處:

  1. 程式碼結構清晰易於理解
  2. 程式碼複雜度降低,容易理解和開發
  3. 層間隔離,利於排查問題
  4. 後期的維護升級方便而簡單
  5. 每一層都可以獨立測試,其他層的介面通過模擬解決
  6. 不同技能的程式設計師可以分工,負責不同的層
  7. 天然適合大多數軟體公司的組織架構
  8. 抽象邏輯複用起來簡單

分層思想的真理:

電腦科學領域任何問題,都可以間接的通過新增一箇中間層來解決。

分層採用的方法:

  1. 單個專案的可採用package方式

com.xxx.core
-- .service
-- .mapper
-- .util
-- .controller
-- .dao
-- .model

  1. 多層專案的採用引入獨立jar方式

paper-parent
-- paper-common
-- paper-core
-- paper-core-api
-- paper-core-service
-- paper-rest

  1. 微服務式分層

企業架構 -- 基礎服務層:使用者、訂單、認證等 -- 應用層:各產品分離 -- 等等

分層介紹

Web型專案的B/S架構中經典分層策略“MVC架構”。這種架構一般的現在工具類的專案中,View採用java渲染引擎JSP(Velocity\Freemaker\Thyemleaf\等),但是主流的網際網路平臺都是前後端分離型專案,前端是獨立構建和釋出模式(npm大前端趨勢),後端以介面方式提供服務。

乾貨分享:目前正在使用的分層架構圖,歡迎討論

layer_arch

表現層

有時候也說是客戶端層,不論是App還是Web或者其他,指客戶直接接觸到的頁面。Web前端架構後期會單獨來詳細介紹,這裡就一筆帶過了。

介面層

  1. 採用Service提供RPC介面服務
  2. 通過Web封裝成Http介面服務

靠譜說絕大多數公司就兩種服務形式:RPC 和 HTTP。統一規範的返回結果和異常的全域性處理是必不可少的。這層不可以丟擲異常,否則會導致client會出現不可控的錯誤,通過標準的ErrorCode&ErrorMeg提示,一般還會有流量控制和許可權等控制監控在這層。

服務層(業務)

所有的業務實現放在這層,一般可以按照業務型別分類也便於識別管理;事務也放在這層,一般推薦只放在這層統一管理。

業務層所負責的:

  1. 處理應用程式的業務邏輯和業務校驗。
  2. 管理事務。
  3. 提供與其他層相互作用的介面。
  4. 管理業務層級別的物件的依賴。
  5. 在表示層和持久層之間增加一個靈活的機制,使得他們不直接聯絡在一起。
  6. 通過揭示從表示層到業務層之間的上下文來得到業務邏輯。
  7. 管理程式的執行(從業務層到持久層)。

持久層

主要有資料庫的entity對映類,只提供簡單CRUD的dao操作類,介面mapper類,一些連線中介軟體的封裝util工具類;這層推薦嚴格禁止事務,異常可以統一封裝一個OrmException對服務層提供。

資料層(儲存)

資料層指儲存,根據業務選擇的資料儲存基礎設施,傳統的關係型資料庫Mysql、Oracle,Nosql資料庫Redis、ES、Mongodb等。不同的資料庫採用的connect方式不同,需要在持久層獨立封裝一個獨立Util類進行集中管理。

dubbo專案的分層結構:

dubbo-arch

推薦

作者: Owen Jia,他的部落格:Owen Blog

轉載請著