欸!你知道三層式架構嗎?

前言

當你在瀏覽網頁時,其實是在跟三個不同層次組成的系統進行互動。
這個系統就是 Web 的三層式架構:

  • Presentation Layer (View, Middleware, Controller, …)
  • Application Layer (Service, Domain Model, …)
  • Data Access Layer (Repository, Proxy, …)

Controller

職責:

  • Routing 解析 (Http, gRPC, …)
  • 驗證 Request (確保格式、權限等是正確的)
  • 將 Request 轉成 DTO,交給 Service 處理
  • 依據 Service 回傳的 Domain Model,準備 Response
  • Exception 處理
  • Cache 管理

Middleware

職責:

  • Global Exception Handler
  • Log Handler
  • Validator

Service

職責:

  • Transaction 處理 (begin, commit, rollback)
  • 調用 Domain Model (包含從 Repository 取得、自己 Contruct 等)
  • 讓 Domain Model 彼此去互動
  • 資料驗證 (確保其合法性、完整性等)

Repository

職責:

  • 處理DB Connection
  • 處理外部 API 呼叫 (Signature, Url, …)
  • 從資料來源檢索並轉換成 Domain Model
  • 進或出會是 Domain Model
  • Repository的命名依據 Domain Model 為主,跟 table name 只是剛好撞名

補充

Simple Design

  1. Pass all tests
  2. Reveals intention
  3. No duplication
  4. Fewest elements

ʕ •ᴥ•ʔ:這是目前與 Erwin 討論及請教91 後的理解,
未來有可能因開發經驗的增加或團隊組成而再發生改變。