4.5 KiB
4.5 KiB
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/TokenServiceCEFRLevelService→ Domain/Learning/CEFRLevelServiceUsageTrackingService→ Domain/User/UsageTrackingServiceAzureSpeechService→ Infrastructure/External/Speech/
🆕 需要新建
IFlashcardService→ Domain/Learning/IUserService→ Domain/User/IConfigurationService→ Infrastructure/Configuration/
🎯 架構原則
領域服務 (Domain)
- 單一職責: 每個服務專注於特定業務領域
- 業務邏輯: 封裝核心業務規則和流程
- 測試友好: 依賴抽象,容易模擬和測試
基礎設施服務 (Infrastructure)
- 技術實現: 處理技術層面的橫切關注點
- 外部依賴: 管理與外部系統的整合
- 配置管理: 統一的配置和環境管理
共用服務 (Shared)
- 工具功能: 跨領域的工具和輔助功能
- 擴展方法: 通用的擴展功能
- 常數定義: 系統級常數和配置
📊 優化效益
代碼組織
- 清晰分層: 按業務領域和技術關注點分類
- 依賴方向: 領域服務不依賴基礎設施細節
- 可維護性: 更容易定位和修改代碼
測試能力
- 單元測試: 每個服務都可獨立測試
- 模擬友好: 依賴注入使模擬變得簡單
- 集成測試: 清晰的邊界便於集成測試
擴展性
- 新功能: 更容易添加新的業務功能
- 微服務: 為未來微服務拆分做準備
- 插件化: 支援功能模組的插拔
🚀 實施步驟
Step 1: 基礎設施層
- 完成 HybridCacheService 三層快取整合
- 重構 AuthService 為 TokenService
- 建立 ConfigurationService
Step 2: 領域服務層
- 建立 FlashcardService 業務邏輯
- 重構 CEFRLevelService 為可注入服務
- 建立 UserService 封裝用戶操作
Step 3: 服務註冊
- 更新 Program.cs 服務註冊
- 更新 Controller 依賴注入
- 移除舊的服務實作
Step 4: 測試覆蓋
- 為每個新服務建立單元測試
- 建立集成測試
- 驗證功能完整性
注意: 這個重構將大幅提升代碼質量和可維護性,為系統的長期發展奠定堅實基礎。