微服務的內部分層結構- 洋蔥 (Onion) 架構

** 本文同步發表於 FB社群-軟體設計鮮思維 **

微服務的內部分層結構- 洋蔥 (Onion) 架構

  • 基於 DDD (Domain Driven Design) 設計思維的一種架構呈現。
  • 洋蔥的中心即爲系統最爲穩固的核心 (如圖爲 Domain Model)。
  • 本質仍為三層式 (3-tier) 分層,亦即展示、應用邏輯、資料存取的分層,但特別強調相依反轉 (IoC, Inverse of Control)。

Onion Architecture 分層 (Layer)

  • Domain Model (領域模型)
  • Domain Service (領域服務)
  • Application Service (應用服務)
  • Infrastructure (基礎建設)

Domain Model (領域模型)

  • 企業系統的核心主結構
  • 包含業務邏輯 (business logic) 與實體 (entity)
  • 傳統物件導向 (object-oriented) 依據領域概念 (domain concepts) 來組成系統的類別模型
  • Ex. Order, OrderLineItem, Product, Customer, ShoppingCart, etc.

Domain Service (領域服務)

  • 封裝 (encapsulate) 多個實體物件 (entity object) 的互動行爲,對外提供統一的進入點 (entry point)
  • 屬於顆粒度較粗 (coarse-grained) 的領域服務物件。
  • Ex. OrderContext, ShoppingCartContext, etc.

Application Service (應用服務)

  • 會調用 (invoke) 領域服務與透過基礎建設取得的邊界資源 (例如資料庫存取),以達成某一特定的領域功能需求
  • 負責處理領域的控制邏輯 (domain control logic)
  • Ex. PlaceOrderService, PlaceShoppingCartService, etc.

Infrastructure (基礎建設)

  • 界定存取資料庫的儲庫 (repository)物件、連結外部系統的 Adapter 物件、提供外界存取的 Web API 物件, etc.
  • Ex. PlaceOrderRepository, VerifyCreditCardAdatper, http://api.example.com/cart-management/users/{id}/cart/checkout, etc.

洋蔥架構的特點

  • 本質仍是展示 (presentation)、應用邏輯 (application logical)、資料存取 (data access) 的分層原則
  • 強調越往洋蔥的核心的分層越是穩固
  • 強調外層與內層的相依反轉 (dependency inverse),亦即內層的核心不直接呼叫外層的服務,而是由外層反轉注入 (inject) 至內層的核心。
  • 相當適合單一微服務內部結構的分層界定規劃
  • 確保了靈活性、可持續性與可移植性
  • 由於應用核心是獨立的,因此可以快速測試系統核心邏輯

文章導覽

   

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *