業務規則是軟體系統存在的理由。它們是核心中的核心,承載著幫公司賺錢或省錢的邏輯。
架構師的首要任務,就是確保這些規則保持質樸(Pristine),
不受任何外在細節(如 UI、資料庫、框架)的汙染。
一、實體 (Entities):關鍵業務規則#
有些業務規則非常核心,即使沒有電腦系統,它們依然存在。
例如:銀行計算利息的公式。無論是用電腦算、還是行員用紙筆算,規則都是一樣的。
這類規則被稱為 「關鍵業務規則(Critical Business Rules)」,
而它們所操作的資料稱為 「關鍵業務資料(Critical Business Data)」。
實體的特徵#
我們將關鍵規則與資料綁定在一起,形成實體(Entity)。
- 純粹性: 實體是個物件,包含資料與函數
- 獨立性: 它完全不需關注資料庫、UI 或第三方框架
- 高層級: 在系統中,它是最高層級的概念(距離 I/O 最遠),因此它不依賴任何東西

Figure 20.1: Loan entity as a class in UML
二、使用案例 (Use Cases):應用程式專屬規則#
並非所有業務規則都通用。有些規則是為自動化系統而設計的,定義了使用者如何操作系統。
這類規則稱為 「使用案例(Use Cases)」。
- 職責:
- 控制並協調實體(Entities)的運作
- 定義輸入資料如何轉換為輸出結果
- 依賴關係:
- 使用案例 ➡️ 依賴 ➡️ 實體
- 使用案例知道實體存在,但不知道使用案例的存在
- 這符合「低層級依賴高層級」的原則(使用案例相對於實體是低層級,因它更接近 I/O)

Figure 20.2: Example use case
flowchart TB
subgraph 外部世界
UI[UI / Web]
DB[(Database)]
end
subgraph 使用案例層
UC[Use Case<br/>應用程式專屬規則]
end
subgraph 實體層
E[Entity<br/>關鍵業務規則]
end
UI -.-> UC
DB -.-> UC
UC -->|依賴| E
style E fill:#fff3cd,stroke:#856404
style UC fill:#f8d7da,stroke:#721c24三、請求與回應模型 (Request & Response Models)#
使用案例需接收輸入並產生輸出。這裡有個重要架構邊界規則: 「不要讓使用案例依賴於 HTML、SQL 或 HTTP 框架。」
- 單純的資料結構: 輸入與輸出應是簡單的資料結構(Request/Response Models)
- 隔離: 這些模型不應知道 Web 的存在(例如不能繼承
HttpRequest)。
這確保了業務規則可被用於 Web、Console 或任何未來介面上
業務規則是系統中最獨立、最可重用的程式碼。
- 實體: 代表業務的核心邏輯(不變的真理)。
- 使用案例: 代表應用程式的操作流程(自動化的劇本)。
它們應是系統中的淨土,不應受到資料庫 SQL 或網頁 HTML 的汙染。