356 lines
12 KiB
Markdown
356 lines
12 KiB
Markdown
# DramaLing 後端 Services 層架構優化計劃
|
|
|
|
**版本**: 1.1
|
|
**日期**: 2025-09-30
|
|
**狀態**: 🚧 **實施中**
|
|
|
|
---
|
|
|
|
## 🎯 **優化目標**
|
|
|
|
基於大規模清理後的 Services 層現況,進一步優化架構設計,提升可維護性、可測試性和擴展性。
|
|
|
|
---
|
|
|
|
## 📊 **當前 Services 層分析**
|
|
|
|
### **現有服務列表** (19個服務)
|
|
|
|
#### **根目錄服務** (14個)
|
|
```
|
|
Services/
|
|
├── AnalysisService.cs # AI 分析服務 (4.9KB)
|
|
├── AudioCacheService.cs # 音訊快取服務 (4.8KB)
|
|
├── AuthService.cs # 認證服務 (3.4KB)
|
|
├── AzureSpeechService.cs # Azure 語音服務 (6.2KB)
|
|
├── GeminiService.cs # Gemini AI 服務 (23.1KB) ⚠️ 過大
|
|
├── IAnalysisService.cs # 分析服務介面 (1.8KB)
|
|
├── IImageGenerationOrchestrator.cs # 圖片生成編排介面 (359B)
|
|
├── IImageProcessingService.cs # 圖片處理服務介面 (254B)
|
|
├── IOptionsVocabularyService.cs # 選項詞彙庫服務介面 (1.6KB)
|
|
├── ImageGenerationOrchestrator.cs # 圖片生成編排服務 (17.3KB) ⚠️ 過大
|
|
├── ImageProcessingService.cs # 圖片處理服務 (3.1KB)
|
|
├── OptionsVocabularyService.cs # 選項詞彙庫服務 (6.9KB)
|
|
├── ReplicateService.cs # Replicate API 服務 (10.6KB)
|
|
└── UsageTrackingService.cs # 使用量追蹤服務 (9.4KB)
|
|
```
|
|
|
|
#### **子目錄服務** (5個)
|
|
```
|
|
Storage/
|
|
├── IImageStorageService.cs # 圖片儲存服務介面 (597B)
|
|
└── LocalImageStorageService.cs # 本地圖片儲存服務 (4.1KB)
|
|
|
|
Monitoring/
|
|
└── OptionsVocabularyMetrics.cs # 選項詞彙庫監控服務 (5.4KB)
|
|
|
|
Caching/
|
|
├── ICacheService.cs # 快取服務介面 (2.9KB)
|
|
└── HybridCacheService.cs # 混合快取服務 (17.6KB) ⚠️ 過大
|
|
```
|
|
|
|
---
|
|
|
|
## 🔍 **問題識別**
|
|
|
|
### **1. 架構問題**
|
|
- **缺乏分層邏輯**: 根目錄混雜不同類型的服務
|
|
- **職責不清**: 部分服務承擔過多責任
|
|
- **命名不一致**: 介面和實作命名規則不統一
|
|
|
|
### **2. 檔案大小問題**
|
|
- **GeminiService.cs (23.1KB)**: 包含過多功能,違反單一職責原則
|
|
- **ImageGenerationOrchestrator.cs (17.3KB)**: 編排邏輯過於複雜
|
|
- **HybridCacheService.cs (17.6KB)**: 快取邏輯包含太多實作細節
|
|
|
|
### **3. 依賴關係問題**
|
|
- **循環依賴風險**: 服務間依賴關係不夠清晰
|
|
- **介面分離不足**: 某些服務職責過大
|
|
- **測試困難**: 大型服務難以進行單元測試
|
|
|
|
---
|
|
|
|
## 🏗️ **優化方案**
|
|
|
|
### **階段一:服務分類重組** (1-2天)
|
|
|
|
#### **1.1 按功能域重新組織目錄結構**
|
|
```
|
|
Services/
|
|
├── Core/ # 核心業務服務
|
|
│ ├── Auth/ # 認證授權
|
|
│ ├── Flashcard/ # 詞卡管理
|
|
│ └── User/ # 用戶管理
|
|
├── AI/ # AI 相關服務
|
|
│ ├── Analysis/ # 分析服務
|
|
│ ├── Gemini/ # Gemini AI
|
|
│ └── Generation/ # 內容生成
|
|
├── Media/ # 多媒體服務
|
|
│ ├── Audio/ # 音訊處理
|
|
│ ├── Image/ # 圖片處理
|
|
│ └── Storage/ # 儲存服務
|
|
├── Infrastructure/ # 基礎設施服務
|
|
│ ├── Caching/ # 快取服務
|
|
│ ├── Monitoring/ # 監控服務
|
|
│ └── Messaging/ # 訊息服務
|
|
└── Vocabulary/ # 詞彙相關服務
|
|
├── Options/ # 選項生成
|
|
└── Management/ # 詞彙管理
|
|
```
|
|
|
|
#### **1.2 服務重新分配**
|
|
```csharp
|
|
// 移動計劃
|
|
AuthService → Core/Auth/
|
|
AnalysisService → AI/Analysis/
|
|
GeminiService → AI/Gemini/ (需拆分)
|
|
ImageGenerationOrchestrator → AI/Generation/ (需拆分)
|
|
ReplicateService → AI/Generation/
|
|
AudioCacheService → Media/Audio/
|
|
AzureSpeechService → Media/Audio/
|
|
ImageProcessingService → Media/Image/
|
|
Storage/* → Media/Storage/
|
|
OptionsVocabularyService → Vocabulary/Options/
|
|
UsageTrackingService → Infrastructure/Monitoring/
|
|
Caching/* → Infrastructure/Caching/
|
|
Monitoring/* → Infrastructure/Monitoring/
|
|
```
|
|
|
|
### **階段二:大型服務拆分** (2-3天)
|
|
|
|
#### **2.1 拆分 GeminiService (23.1KB)**
|
|
```csharp
|
|
// 拆分為多個專職服務
|
|
AI/Gemini/
|
|
├── IGeminiClient.cs # HTTP 客戶端介面
|
|
├── GeminiClient.cs # HTTP 客戶端實作
|
|
├── IGeminiAnalyzer.cs # 分析功能介面
|
|
├── GeminiAnalyzer.cs # 句子分析服務
|
|
├── IGeminiDescriptionGenerator.cs # 描述生成介面
|
|
├── GeminiDescriptionGenerator.cs # 圖片描述生成服務
|
|
├── Models/ # Gemini 相關 DTOs
|
|
└── Configuration/ # Gemini 配置類
|
|
```
|
|
|
|
#### **2.2 拆分 ImageGenerationOrchestrator (17.3KB)**
|
|
```csharp
|
|
// 拆分為多個專職服務
|
|
AI/Generation/
|
|
├── IImageGenerationWorkflow.cs # 工作流程介面
|
|
├── ImageGenerationWorkflow.cs # 主要工作流程
|
|
├── IGenerationStateManager.cs # 狀態管理介面
|
|
├── GenerationStateManager.cs # 狀態管理實作
|
|
├── IGenerationValidator.cs # 驗證服務介面
|
|
├── GenerationValidator.cs # 請求驗證服務
|
|
└── Steps/ # 生成步驟
|
|
├── IDescriptionStep.cs # 描述生成步驟
|
|
├── DescriptionStep.cs
|
|
├── IImageStep.cs # 圖片生成步驟
|
|
├── ImageStep.cs
|
|
├── IStorageStep.cs # 儲存步驟
|
|
└── StorageStep.cs
|
|
```
|
|
|
|
#### **2.3 拆分 HybridCacheService (17.6KB)**
|
|
```csharp
|
|
// 拆分為多個專職服務
|
|
Infrastructure/Caching/
|
|
├── ICacheProvider.cs # 快取提供者介面
|
|
├── MemoryCacheProvider.cs # 記憶體快取實作
|
|
├── DistributedCacheProvider.cs # 分散式快取實作
|
|
├── ICacheKeyGenerator.cs # 快取鍵生成介面
|
|
├── CacheKeyGenerator.cs # 快取鍵生成實作
|
|
├── ICacheConfiguration.cs # 快取配置介面
|
|
├── CacheConfiguration.cs # 快取配置實作
|
|
└── Strategies/ # 快取策略
|
|
├── IEvictionStrategy.cs # 清除策略介面
|
|
└── LRUEvictionStrategy.cs # LRU 清除策略
|
|
```
|
|
|
|
### **階段三:介面標準化** (1天)
|
|
|
|
#### **3.1 統一命名規則**
|
|
```csharp
|
|
// 介面命名規則
|
|
I{ServiceName}Service # 業務服務介面
|
|
I{ServiceName}Provider # 基礎設施提供者介面
|
|
I{ServiceName}Manager # 管理器介面
|
|
I{ServiceName}Factory # 工廠介面
|
|
|
|
// 實作命名規則
|
|
{ServiceName}Service # 業務服務實作
|
|
{ServiceName}Provider # 基礎設施提供者實作
|
|
{ServiceName}Manager # 管理器實作
|
|
{ServiceName}Factory # 工廠實作
|
|
```
|
|
|
|
#### **3.2 介面職責定義**
|
|
```csharp
|
|
// 服務層級定義
|
|
public interface IBusinessService<T> # 業務邏輯服務
|
|
public interface IDataService<T> # 資料存取服務
|
|
public interface IIntegrationService # 外部整合服務
|
|
public interface IInfrastructureService # 基礎設施服務
|
|
```
|
|
|
|
### **階段四:依賴注入優化** (1天)
|
|
|
|
#### **4.1 服務註冊重組**
|
|
```csharp
|
|
// Extensions/ServiceCollectionExtensions.cs 重構
|
|
public static IServiceCollection AddCoreServices(this IServiceCollection services)
|
|
public static IServiceCollection AddAIServices(this IServiceCollection services)
|
|
public static IServiceCollection AddMediaServices(this IServiceCollection services)
|
|
public static IServiceCollection AddInfrastructureServices(this IServiceCollection services)
|
|
public static IServiceCollection AddVocabularyServices(this IServiceCollection services)
|
|
```
|
|
|
|
#### **4.2 服務生命週期標準化**
|
|
```csharp
|
|
// 生命週期規則
|
|
Singleton # 無狀態配置服務、快取提供者
|
|
Scoped # 業務邏輯服務、資料存取服務
|
|
Transient # 輕量級工具服務、工廠服務
|
|
```
|
|
|
|
### **階段五:測試友好設計** (2天)
|
|
|
|
#### **5.1 介面抽象化**
|
|
- 確保所有服務都有對應介面
|
|
- 移除具體類型依賴
|
|
- 支援模擬測試
|
|
|
|
#### **5.2 單元測試覆蓋**
|
|
```csharp
|
|
// 測試結構
|
|
Tests/
|
|
├── Services/
|
|
│ ├── Core/
|
|
│ ├── AI/
|
|
│ ├── Media/
|
|
│ ├── Infrastructure/
|
|
│ └── Vocabulary/
|
|
└── Integration/
|
|
├── AI/
|
|
└── Media/
|
|
```
|
|
|
|
---
|
|
|
|
## 📅 **實施時程**
|
|
|
|
### **第 1 週**
|
|
- **第 1-2 天**: 階段一 - 服務分類重組
|
|
- **第 3-5 天**: 階段二 - 大型服務拆分
|
|
- **第 6-7 天**: 階段三 - 介面標準化
|
|
|
|
### **第 2 週**
|
|
- **第 1 天**: 階段四 - 依賴注入優化
|
|
- **第 2-3 天**: 階段五 - 測試友好設計
|
|
- **第 4-5 天**: 整合測試與驗證
|
|
|
|
---
|
|
|
|
## 🎯 **預期效果**
|
|
|
|
### **程式碼品質提升**
|
|
- **可維護性**: 服務職責單一,易於修改
|
|
- **可測試性**: 介面抽象化,支援模擬測試
|
|
- **可讀性**: 目錄結構清晰,命名一致
|
|
|
|
### **開發效率提升**
|
|
- **團隊協作**: 功能域分離,減少衝突
|
|
- **新功能開發**: 標準化介面,快速擴展
|
|
- **問題定位**: 服務分離,快速排查
|
|
|
|
### **架構健康度**
|
|
- **從當前 7.5/10 提升到 9.0/10**
|
|
- **服務數量**: 19個 → 約35個 (拆分後)
|
|
- **平均檔案大小**: 減少60%
|
|
- **測試覆蓋率**: 從0% → 80%+
|
|
|
|
---
|
|
|
|
## ⚠️ **風險評估**
|
|
|
|
### **高風險項目**
|
|
- **GeminiService 拆分**: 影響多個控制器
|
|
- **快取服務重構**: 可能影響效能
|
|
|
|
### **降低風險措施**
|
|
- **分階段實施**: 避免大規模同時變更
|
|
- **充分測試**: 每階段完成後進行整合測試
|
|
- **回滾計劃**: 保持舊版本分支作為備份
|
|
|
|
---
|
|
|
|
## 📋 **檢查清單**
|
|
|
|
### **階段一完成標準**
|
|
- [ ] 目錄結構重組完成
|
|
- [ ] 所有服務移動到對應目錄
|
|
- [ ] 編譯無錯誤
|
|
- [ ] 基本功能測試通過
|
|
|
|
### **階段二完成標準**
|
|
- [ ] 大型服務拆分完成
|
|
- [ ] 新服務介面定義清晰
|
|
- [ ] 依賴注入配置更新
|
|
- [ ] 單元測試覆蓋重要邏輯
|
|
|
|
### **整體完成標準**
|
|
- [ ] 所有服務檔案 < 10KB
|
|
- [ ] 介面命名規則統一
|
|
- [ ] 依賴關係清晰無循環
|
|
- [ ] 測試覆蓋率 > 80%
|
|
- [ ] 效能回歸測試通過
|
|
|
|
---
|
|
|
|
## 📈 **實施進度**
|
|
|
|
### **✅ 已完成項目** (2025-09-30)
|
|
|
|
#### **階段一:服務分類重組** ✅ **已完成**
|
|
- ✅ **新目錄結構創建**: 建立 Core/AI/Media/Infrastructure/Vocabulary 功能域
|
|
- ✅ **服務重新分配**: 19個服務已移動到對應功能域目錄
|
|
- ✅ **編譯驗證**: 新架構編譯成功,服務正常運行
|
|
|
|
#### **當前架構狀態**
|
|
```
|
|
Services/ (重組後)
|
|
├── Core/Auth/ # 認證服務 (1個文件)
|
|
├── AI/
|
|
│ ├── Analysis/ # 分析服務 (2個文件)
|
|
│ ├── Gemini/ # Gemini AI (1個文件, 584行) ⚠️ 待拆分
|
|
│ └── Generation/ # 圖片生成 (3個文件)
|
|
├── Media/
|
|
│ ├── Audio/ # 音訊服務 (2個文件)
|
|
│ ├── Image/ # 圖片處理 (2個文件)
|
|
│ └── Storage/ # 儲存服務 (2個文件)
|
|
├── Infrastructure/
|
|
│ ├── Caching/ # 快取服務 (2個文件) ⚠️ 待拆分
|
|
│ └── Monitoring/ # 監控服務 (2個文件)
|
|
└── Vocabulary/
|
|
└── Options/ # 選項詞彙庫 (2個文件)
|
|
```
|
|
|
|
### **🚧 下一步實施計劃**
|
|
|
|
#### **階段二:大型服務拆分** 🔄 **準備中**
|
|
- ⏳ **GeminiService 拆分** (584行 → 多個專職服務)
|
|
- ⏳ **ImageGenerationOrchestrator 拆分** (424行 → 工作流程服務)
|
|
- ⏳ **HybridCacheService 拆分** (大型快取服務 → 策略模式)
|
|
|
|
#### **階段三:介面標準化** ⏸️ **待開始**
|
|
- ⏸️ 統一命名規則實施
|
|
- ⏸️ 服務層級介面定義
|
|
- ⏸️ 依賴注入標準化
|
|
|
|
---
|
|
|
|
**文檔版本**: 1.1
|
|
**最後更新**: 2025-09-30 17:02
|
|
**負責人**: Claude Code
|
|
**審核狀態**: 實施中
|
|
**進度**: 階段一完成 (33%) |