# 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. 驗證功能完整性 --- **注意**: 這個重構將大幅提升代碼質量和可維護性,為系統的長期發展奠定堅實基礎。