前言
當你在瀏覽網頁時,其實是在跟三個不同層次組成的系統進行互動。
這個系統就是 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
- Pass all tests
- Reveals intention
- No duplication
- Fewest elements