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

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/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. 驗證功能完整性

注意: 這個重構將大幅提升代碼質量和可維護性,為系統的長期發展奠定堅實基礎。