dramaling-vocab-learning/docs/05_deployment/README_ARCHITECTURE.md

117 lines
4.5 KiB
Markdown

# Services 層架構重構
## 📁 **重構後的目錄結構**
```
/Services/
├── 📁 Domain/ # 領域服務層
│ ├── Learning/ # 學習領域
│ │ ├── IFlashcardService.cs # ✅ 詞卡業務邏輯
│ │ ├── ICEFRLevelService.cs # ✅ CEFR 等級管理
│ │ ├── IStudySessionService.cs # 🔄 學習會話管理
│ │ └── ISpacedRepetitionService.cs # 🔄 間隔重複算法
│ ├── Analysis/ # 分析領域
│ │ ├── IAnalysisService.cs # ✅ AI 分析業務邏輯
│ │ └── IVocabularyService.cs # 🔄 詞彙管理
│ └── User/ # 用戶領域
│ ├── IUserService.cs # 🔄 用戶業務邏輯
│ └── IUsageTrackingService.cs # ✅ 使用量追蹤
├── 📁 Infrastructure/ # 基礎設施服務
│ ├── Authentication/ # 認證基礎設施
│ │ ├── ITokenService.cs # ✅ Token 處理
│ │ └── IUserIdentityService.cs # ✅ 用戶身份
│ ├── Caching/ # 快取基礎設施
│ │ ├── ICacheService.cs # ✅ 統一快取介面
│ │ └── HybridCacheService.cs # ✅ 三層快取實作
│ ├── External/ # 外部服務
│ │ ├── AI/ # AI 提供商
│ │ └── Speech/ # 語音服務
│ ├── Configuration/ # 配置管理
│ │ └── IConfigurationService.cs # ✅ 統一配置管理
│ └── Monitoring/ # 監控服務
│ └── HealthCheckService.cs # ✅ 健康檢查
└── 📁 Shared/ # 共用服務
├── Utilities/ # 工具服務
└── Extensions/ # 擴展方法
```
## 🔄 **遷移計劃**
### **✅ 已重構**
- `IAnalysisService` → Domain/Analysis/
- `ICacheService` → Infrastructure/Caching/
- `IAIProvider` → Infrastructure/External/AI/
- `HealthCheckService` → Infrastructure/Monitoring/
### **🔄 需要遷移**
- `AuthService` → Infrastructure/Authentication/TokenService
- `CEFRLevelService` → Domain/Learning/CEFRLevelService
- `UsageTrackingService` → Domain/User/UsageTrackingService
- `AzureSpeechService` → Infrastructure/External/Speech/
### **🆕 需要新建**
- `IFlashcardService` → Domain/Learning/
- `IUserService` → Domain/User/
- `IConfigurationService` → Infrastructure/Configuration/
## 🎯 **架構原則**
### **領域服務 (Domain)**
- **單一職責**: 每個服務專注於特定業務領域
- **業務邏輯**: 封裝核心業務規則和流程
- **測試友好**: 依賴抽象,容易模擬和測試
### **基礎設施服務 (Infrastructure)**
- **技術實現**: 處理技術層面的橫切關注點
- **外部依賴**: 管理與外部系統的整合
- **配置管理**: 統一的配置和環境管理
### **共用服務 (Shared)**
- **工具功能**: 跨領域的工具和輔助功能
- **擴展方法**: 通用的擴展功能
- **常數定義**: 系統級常數和配置
## 📊 **優化效益**
### **代碼組織**
- **清晰分層**: 按業務領域和技術關注點分類
- **依賴方向**: 領域服務不依賴基礎設施細節
- **可維護性**: 更容易定位和修改代碼
### **測試能力**
- **單元測試**: 每個服務都可獨立測試
- **模擬友好**: 依賴注入使模擬變得簡單
- **集成測試**: 清晰的邊界便於集成測試
### **擴展性**
- **新功能**: 更容易添加新的業務功能
- **微服務**: 為未來微服務拆分做準備
- **插件化**: 支援功能模組的插拔
## 🚀 **實施步驟**
### **Step 1: 基礎設施層**
1. 完成 HybridCacheService 三層快取整合
2. 重構 AuthService 為 TokenService
3. 建立 ConfigurationService
### **Step 2: 領域服務層**
1. 建立 FlashcardService 業務邏輯
2. 重構 CEFRLevelService 為可注入服務
3. 建立 UserService 封裝用戶操作
### **Step 3: 服務註冊**
1. 更新 Program.cs 服務註冊
2. 更新 Controller 依賴注入
3. 移除舊的服務實作
### **Step 4: 測試覆蓋**
1. 為每個新服務建立單元測試
2. 建立集成測試
3. 驗證功能完整性
---
**注意**: 這個重構將大幅提升代碼質量和可維護性,為系統的長期發展奠定堅實基礎。