Skip to content

[Phase2-1.4c] Engine 整合雙軌 GroupBy + fallback 機制 #96

@cct08311github

Description

@cct08311github

Parent Epic

#90

依賴

任務

將雙軌策略整合進 AnalysisQueryEngine,支援 server-side 優先 + in-process fallback。

實作

修改 src/WalkingTec.Mvvm.Core/Analysis/AnalysisQueryEngine.cs

public class AnalysisQueryEngine
{
    private readonly GroupByStrategyResolver _resolver;
    
    // 新建構子(DI 友善)
    public AnalysisQueryEngine(GroupByStrategyResolver resolver)
        => _resolver = resolver;
    
    // 保留無參數建構子(向後相容,預設 InProcess)
    public AnalysisQueryEngine()
        => _resolver = GroupByStrategyResolver.Default;
    
    public AnalysisQueryResponse Execute<TModel>(
        IQueryable<TModel> baseQuery,
        AnalysisQueryRequest req,
        IEnumerable<AnalysisFieldMeta> whitelist,
        DBTypeEnum dbType = DBTypeEnum.SQLite)  // 新參數,預設 SQLite(向後相容)
    {
        var strategy = _resolver.Resolve(dbType, req);
        List<Dictionary<string, object?>> rows;
        try
        {
            rows = strategy.Execute<TModel>(filtered, req, wl);
        }
        catch (InvalidOperationException) when (strategy is ServerSideGroupByStrategy)
        {
            // Server-side 翻譯失敗 → fallback to in-process
            rows = new InProcessGroupByStrategy().Execute<TModel>(filtered, req, wl);
        }
        // ... 截斷、回應組裝不變
    }
}

向後相容

  • 無參數建構子保留,預設 InProcess 行為不變
  • Execute() 新增 dbType 參數有預設值,既有呼叫端不需改動
  • Controller 傳入 Wtm.DC.DBType

驗證

  • 既有 52 個 Engine 測試全部通過(行為不變)
  • 新增 fallback 測試:模擬 ServerSide 拋例外 → 自動降級
  • 新增 DI 注入測試

複雜度

Metadata

Metadata

Assignees

No one assigned

    Labels

    P0Critical priorityanalysis-modeAnalysis Mode featureenhancementNew feature or requestin-progressWork currently in progressperformancePerformance improvementphase-2Phase 2 roadmap

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions