dramaling-vocab-learning/note/done/NEXT_OPTIMIZATION_PLAN.md

7.2 KiB

DramaLing 下階段優化計劃

📋 當前狀況分析

已完成的優化 (符合指南)

  • Repository Pattern 基礎架構
  • AI 提供商抽象層
  • 智能快取策略架構
  • 安全中間件架構 (未啟用)
  • 結構化錯誤處理
  • 前端性能優化工具

⚠️ 需要修正的問題

  • Repository 實作類型不匹配 (Guid vs string/int)
  • 部分中間件編譯錯誤
  • 新功能暫時註解以確保穩定性

與指南的主要差異

🎯 Phase 1: 緊急修正 (1-2 天)

1. 修正編譯錯誤

優先級: 🔴

# 需要修正的文件:
- /Middleware/AdvancedErrorHandlingMiddleware.cs (switch 表達式重複模式)
- /Controllers/OptimizedAIController.cs (FromCache 屬性)
- /Repositories/*.cs (Guid vs string 類型不匹配)

預期效益: 啟用所有新功能,系統穩定性提升

2. 業務服務層實作

優先級: 🟡

// 需要建立:
public interface IAnalysisService
{
    Task<SentenceAnalysisData> AnalyzeSentenceAsync(string inputText, AnalysisOptions options);
    Task<AnalysisCache?> GetCachedAnalysisAsync(string inputHash);
    Task SaveAnalysisAsync(SentenceAnalysisData analysis);
}

public interface IFlashcardService
{
    Task<FlashcardDto> CreateFlashcardAsync(CreateFlashcardRequest request);
    Task<IEnumerable<FlashcardDto>> GetUserFlashcardsAsync(Guid userId);
    Task<StudyRecommendations> GetStudyRecommendationsAsync(Guid userId);
}

預期效益: 業務邏輯分離,可測試性提升 60%

3. 啟用優化功能

優先級: 🟡

// Program.cs 中啟用:
builder.Services.AddScoped<ICacheService, HybridCacheService>();
builder.Services.AddScoped<IAIProviderManager, AIProviderManager>();
app.UseMiddleware<SecurityMiddleware>();

預期效益: AI API 成本降低 60-80%,響應速度提升 40-60%

🚀 Phase 2: 架構完善 (1-2 週)

1. 測試框架建立

目標覆蓋率: 80%+

/Tests/
├── Unit/                    # 單元測試 (70%)
│   ├── Services/
│   ├── Repositories/
│   └── AI/
├── Integration/             # 整合測試 (20%)
│   ├── Controllers/
│   └── Database/
└── E2E/                     # 端到端測試 (10%)
    └── AI_Analysis_Flow/

2. 監控和可觀測性

// 需要實作:
- Metrics 收集器 (Prometheus/OpenTelemetry)
- 結構化日誌 (Serilog with ELK Stack)
- 分散式追蹤 (Jaeger/Zipkin)
- 自動告警系統

3. 性能監控儀表板

監控指標:
- API 響應時間分佈
- AI 提供商性能比較
- 快取命中率趨勢
- 錯誤率和類型分析
- 使用者行為分析

📈 Phase 3: 進階優化 (1-2 月)

1. 微服務準備

領域拆分:
├── AI.Service (句子分析、AI 管理)
├── User.Service (用戶管理、認證)
├── Learning.Service (詞卡、學習記錄)
└── Analytics.Service (統計、推薦)

2. 事件驅動架構

// 事件系統:
public interface IEventBus
{
    Task PublishAsync<T>(T eventData) where T : IDomainEvent;
    Task SubscribeAsync<T>(Func<T, Task> handler) where T : IDomainEvent;
}

// 領域事件:
- AnalysisCompletedEvent
- FlashcardCreatedEvent
- UserLevelUpdatedEvent
- StudySessionEndedEvent

3. AI 能力擴展

多提供商支援:
├── OpenAI GPT-4 Provider
├── Anthropic Claude Provider
├── 本地模型 Provider (Ollama)
└── 批次處理和請求合併

🛠️ 具體優化建議

立即優化 (今天)

  1. 修正類型問題
// 統一 ID 類型使用
public interface IFlashcardRepository : IRepository<Flashcard>
{
    Task<IEnumerable<Flashcard>> GetFlashcardsByUserIdAsync(Guid userId);
    Task<IEnumerable<Flashcard>> GetFlashcardsByCardSetIdAsync(Guid cardSetId);
    // ... 其他方法使用正確的 Guid 類型
}
  1. 簡化 Repository 實作
// 暫時使用簡化版本,專注於核心功能
public class FlashcardRepository : BaseRepository<Flashcard>
{
    // 只實作最重要的方法,避免複雜的關聯查詢
    public async Task<List<Flashcard>> GetByUserIdAsync(Guid userId)
    {
        return await _dbSet.AsNoTracking()
            .Where(f => f.UserId == userId && !f.IsArchived)
            .ToListAsync();
    }
}

週內優化

  1. 業務服務層
public class AnalysisService : IAnalysisService
{
    private readonly IAIProviderManager _aiProviderManager;
    private readonly ICacheService _cacheService;
    private readonly IAnalysisRepository _repository;

    public async Task<SentenceAnalysisData> AnalyzeSentenceAsync(
        string inputText, AnalysisOptions options)
    {
        // 1. 快取檢查
        var cacheKey = GenerateCacheKey(inputText, options);
        var cached = await _cacheService.GetAsync<SentenceAnalysisData>(cacheKey);
        if (cached != null) return cached;

        // 2. AI 分析
        var result = await _aiProviderManager.AnalyzeSentenceAsync(inputText, options);

        // 3. 快取存儲
        await _cacheService.SetAsync(cacheKey, result);

        // 4. 持久化 (可選)
        await _repository.SaveAnalysisAsync(result);

        return result;
    }
}
  1. 健康檢查端點
app.MapHealthChecks("/health", new HealthCheckOptions
{
    ResponseWriter = async (context, report) =>
    {
        context.Response.ContentType = "application/json";
        var response = new
        {
            status = report.Status.ToString(),
            checks = report.Entries.Select(x => new
            {
                name = x.Key,
                status = x.Value.Status.ToString(),
                exception = x.Value.Exception?.Message,
                duration = x.Value.Duration.TotalMilliseconds
            })
        };
        await context.Response.WriteAsync(JsonSerializer.Serialize(response));
    }
});

📊 優化效益預估

Phase 1 完成後

  • 系統穩定性: ↑ 30-50%
  • 代碼可維護性: ↑ 40-60%
  • AI API 成本: ↓ 60-80%
  • 響應時間: ↓ 40-60%

Phase 2 完成後

  • 測試覆蓋率: 0% → 80%+
  • 問題發現時間: ↓ 70-80%
  • 部署信心: ↑ 顯著提升
  • 監控可視性: ↑ 90%+

Phase 3 完成後

  • 系統擴展性: ↑ 支援 10x 用戶成長
  • 微服務就緒: 完全準備
  • 多 AI 提供商: 避免供應商鎖定
  • 事件驅動: 高度解耦和彈性

🎯 實施優先順序

🔴 立即執行 (今天)

  1. 修正編譯錯誤,啟用新功能
  2. 測試 AI 分析端點正常運作
  3. 驗證快取機制工作正常

🟡 本週完成

  1. 建立業務服務層
  2. 完善健康檢查系統
  3. 建立基礎單元測試

🟢 月內完成

  1. 完整測試覆蓋率
  2. 監控儀表板
  3. 性能基準測試

總結: 您的系統已經有了堅實的優化基礎,主要需要修正一些技術細節並逐步啟用新功能。按照這個計劃執行,可以將系統提升到企業級標準。