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

---

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