五層式架構

CallIT 後端 Django 嚴格遵守的目錄分層:api → schema → service → repository → model,目的是降低耦合、便於測試。

五層職責

職責範例工作
api/請求接收、Routing、Response 封裝URL 對應 view、status code 包裝
schema/用 Pydantic 或 Django Ninja 定義 schema,請求參數校驗 + 響應結構化防 XSS、防注入、欄位型別檢查
service/核心業務邏輯:權限校驗、狀態流轉APPLYING → PROCESSING 規則、角色判定
repository/封裝所有 DB CRUD,隔離 ORM查/寫 Request 表、跨資料庫查詢
model/Django ORM 實體模型定義RequestAuditLog table 定義

為什麼這樣分

  • api 不寫業務邏輯:避免 controller 越權做事,所有業務邏輯集中在 service
  • schema 攔在最外面:所有外部輸入先校驗,保護 service 與 model
  • repository 做 ORM 隔離:將來換 ORM、換 DB 不用改 service
  • service 是唯一可信邏輯層:權限判定、狀態流轉只能在這寫

跟其他層的關係

api  ←→  schema  ←→  service  ←→  repository  ←→  model  ←→  DB

依賴方向是單向的(上層依賴下層,不反向):api 認得 schema/service,但 service 不認得 api。

應用場景(CallIT 特有)

  • 狀態流轉service.transition_state(request_id, new_state) 集中所有規則
  • 權限驗證service.check_role(user, "IT") 給 api 與 background task 共用
  • 代申請模式:行政 / IT 角色才能呼叫 service.create_on_behalf(...)

相關概念

強連結(原文明確提及)

深入閱讀

← 回到 wiki