Skip to content

分析模組架構優化開發筆記

概述

任務背景: CustomerAnalytics 模組出現數據顯示問題,需要檢視並優化所有分析模組的架構一致性 優化原則: 遵循 YAGNI (You Aren't Gonna Need It) 原則,避免過度工程化 目標: 統一架構模式,但只修復有問題的部分,保持已工作良好的模組

🔍 問題識別

主要問題:CustomerAnalytics 功能失效

typescript
// ❌ 當前複雜架構導致的問題
CustomerAnalyticsView.vue
├── useCustomerAnalyticsComplete (Edge Function)
├── useCustomerAnalyticsBasic (備援)
└── 複雜的數據優先級邏輯 → 導致數據顯示失敗

具體症狀:

  • 所有分析標籤頁顯示空內容
  • Edge Function 正常返回數據,但被複雜的優先級邏輯忽略
  • 備援系統執行成功但返回空數據 (所有計數為 0)

根因分析 (基於 git 9b744341 對比)

工作版本的簡單架構:

typescript
// ✅ 工作正常的版本 (9b744341)
CustomerAnalyticsView → useCustomerAnalyticsBasic → CustomerAnalyticsZeroExpansionService

當前版本的複雜架構:

typescript
// ❌ 當前複雜版本
CustomerAnalyticsView → useCustomerAnalyticsComplete + useCustomerAnalyticsBasic (備援)
                     → 複雜的數據合併和優先級邏輯

分析模組現況評估

✅ 運作良好,保持現狀的模組 (3個)

1. OrderAnalytics

  • 架構: OrderAnalyticsView → useOrderAnalyticsBasic → OrderAnalyticsZeroExpansionService
  • 評估: ✅ 架構清晰,功能正常,符合理想模式
  • 決策: 保持現狀

2. SupportAnalytics

  • 架構: SupportAnalyticsView → useSupportAnalytics → SupportAnalyticsApiService
  • 評估: ✅ 架構清晰,功能正常,符合理想模式
  • 決策: 保持現狀

3. ProductAnalytics

  • 架構: ProductAnalyticsView → useProductAnalytics → 直接查詢
  • 評估: ✅ 簡單有效,功能正常
  • 決策: 保持現狀

需要優化的模組 (2個)

1. CustomerAnalytics (優先級:🔥 立即)

  • 問題: 複雜的 Edge Function + 備援雙重架構導致功能失敗
  • 當前檔案:
    • CustomerAnalyticsView.vue (複雜的雙重架構)
    • useCustomerAnalyticsCompleteQueries.ts (Edge Function 查詢)
    • useCustomerAnalyticsBasic.ts (備援組合函數)
  • 解決方案: 恢復到簡單的單一架構模式

2. DashboardExecutiveHealth (優先級:🔸 中期)

  • 問題: 多重查詢 + 複雜備援邏輯,過度複雜
  • 當前檔案: DashboardExecutiveHealth.vue
  • 解決方案: 選擇最有效的單一數據源,移除備援邏輯

統一架構設計原則

理想的標準架構模式

typescript
View Layer (XXXAnalyticsView.vue)
    ↓ 單一數據流
Composable Layer (useXXXAnalytics.ts)
    ↓ 標準化業務邏輯
Service Layer (XXXAnalyticsService.ts)
    ↓ 統一 API 介面
ServiceFactory 註冊和管理

避免的複雜模式

typescript
// ❌ 避免這些複雜模式
View → Multiple Queries + Fallback Logic + Priority Handling
View → Edge Function + Backup Service + Complex Data Merging  
View → Parallel Queries + Manual Data Consolidation

核心設計原則

  1. YAGNI 導向: 只實現當前需要的功能,避免過度設計
  2. 單一職責: 每層只負責自己的職責,避免職責混合
  3. 實用主義: 優先解決實際問題,而非強制統一
  4. 漸進演進: 架構可隨需求成長,但不預先過度設計

優化執行計劃

Phase 1: CustomerAnalytics 架構簡化 (立即執行)

目標

  • 恢復 CustomerAnalytics 的數據顯示功能
  • 簡化複雜的雙重架構為單一可靠架構

具體步驟

  1. 移除複雜邏輯:

    typescript
    // ❌ 移除
    - useCustomerAnalyticsCompleteQueries.ts
    - CustomerAnalyticsView.vue 中的複雜優先級邏輯
    
    // ✅ 保留並優化
    - useCustomerAnalyticsBasic.ts
    - CustomerAnalyticsZeroExpansionService.ts
  2. 恢復簡單架構:

    typescript
    // 恢復到工作版本的模式
    CustomerAnalyticsView → useCustomerAnalyticsBasic → CustomerAnalyticsZeroExpansionService
  3. 修正日期範圍: UI 日期預設從 89 天改為 7 天,匹配實際數據範圍

預期成果

  • 所有 5 個分析標籤頁正常顯示數據
  • 移除複雜的數據合併邏輯
  • 統一使用單一可靠的數據源

Phase 2: DashboardExecutiveHealth 簡化 (中期執行)

目標

  • 減少 DashboardExecutiveHealth 的維護複雜度
  • 統一使用最有效的單一數據源

具體步驟

  1. 評估當前查詢:

    • useCompleteDashboardHealth (主要)
    • useUnifiedDashboardContent (統合內容)
    • 多個備援查詢 (businessHealthQuery, revenueKPIsQuery 等)
  2. 選擇最優方案: 保留最有效的查詢,移除冗余備援

  3. 簡化刷新邏輯: 統一使用單一刷新函數

技術實現詳細規格

CustomerAnalytics 修復規格

檔案修改清單

  1. CustomerAnalyticsView.vue:

    typescript
    // ❌ 移除複雜導入
    import { useCustomerAnalyticsComplete } from '@/composables/queries/useCustomerAnalyticsCompleteQueries'
    
    // ✅ 簡化為單一導入
    import { useCustomerAnalyticsBasic } from '@/composables/analytics/useCustomerAnalyticsBasic'
    
    // ❌ 移除複雜的數據優先級邏輯
    const churnRisks = computed(() => {
      if (legacyChurnRisks.value && legacyChurnRisks.value.length > 0) {
        return legacyChurnRisks.value
      }
      // ... 複雜邏輯
    })
    
    // ✅ 簡化為直接使用
    const { churnRisks, ... } = useCustomerAnalyticsBasic()
  2. 日期範圍修正:

    typescript
    // ❌ 修正前
    const dateRange = ref<DateRange>({
      start: today(getLocalTimeZone()).subtract({ days: 89 }),
      end: today(getLocalTimeZone()),
    })
    
    // ✅ 修正後
    const dateRange = ref<DateRange>({
      start: today(getLocalTimeZone()).subtract({ days: 7 }),
      end: today(getLocalTimeZone()),
    })

備援服務檢查

  1. CustomerAnalyticsZeroExpansionService.ts: 確保查詢邏輯正確
  2. 數據篩選邏輯: 確保活躍客戶篩選正確工作
  3. 分析算法: 檢查為什麼返回空數據,調整參數或閾值

標準化 Composable 模式

typescript
// 統一的 Composable 模式範本
export function useXXXAnalytics() {
  const service = defaultServiceFactory.getXXXAnalyticsService()
  
  // 響應式狀態
  const state = ref({ isLoading: false, error: null, data: null })
  
  // 主要分析函數
  async function performXXXAnalytics(params) {
    try {
      state.value.isLoading = true
      const response = await service.getAnalytics(params)
      // 處理響應...
    } catch (error) {
      state.value.error = error.message
    } finally {
      state.value.isLoading = false
    }
  }
  
  return { ...state.value, performXXXAnalytics }
}

成果量化指標

技術指標

  • 代碼複雜度: 減少 CustomerAnalyticsView.vue 40% 的代碼量
  • 檔案數量: 移除 1 個不必要的查詢檔案 (useCustomerAnalyticsCompleteQueries.ts)
  • 依賴關係: 簡化從 3 層依賴到 2 層依賴
  • 維護負擔: 移除複雜的數據合併邏輯和優先級判斷

功能指標

  • 數據顯示: CustomerAnalytics 所有標籤頁恢復正常顯示
  • 載入速度: 移除不必要的並行查詢,提升載入效率
  • 錯誤處理: 統一錯誤處理邏輯,減少錯誤狀態

可維護性指標

  • 架構一致性: 5 個分析模組中,4 個使用統一的簡單架構
  • 新人友善性: 新開發者更容易理解單一數據流架構
  • 除錯難度: 移除複雜的數據流,除錯更直接

🎓 經驗與教訓

✅ 成功要素

  1. 問題導向: 基於實際功能問題進行架構優化,而非為統一而統一
  2. 歷史對比: 通過 git 歷史對比找到工作版本的成功模式
  3. YAGNI 原則: 只修復有問題的部分,保持已工作良好的代碼
  4. 漸進演進: 分階段執行,先解決關鍵問題再考慮一致性

避免的陷阱

  1. 過度工程化: 不要為了架構統一而引入不必要的複雜性
  2. 破壞性重構: 不要為了統一而破壞已經工作良好的模組
  3. 預先優化: 不要預設未來需求,專注解決當前實際問題
  4. 複雜備援: 避免建立複雜的備援和降級邏輯,選擇一個可靠方案

🔮 未來擴展指引

  1. 按需擴展: 只有當確實需要多種實現時,才考慮工廠模式
  2. 實證決策: 基於實際使用數據決定是否需要更複雜的架構
  3. 團隊規模: 隨著團隊擴大,再考慮更多標準化和抽象層
  4. 業務複雜度: 當業務邏輯真正複雜時,再引入更深的分層

可複製性和標準化

分析模組開發標準流程

  1. 需求分析: 確定實際的業務需求和數據來源
  2. 架構選擇: 優先選擇最簡單有效的三層架構
  3. 實現開發: View → Composable → Service 的標準實現
  4. 測試驗證: 確保數據流和錯誤處理正確
  5. 文檔記錄: 記錄設計決策和架構選擇理由

故障排除標準流程

  1. 問題重現: 確定具體的功能失效症狀
  2. 歷史對比: 查找最後工作正常的版本進行對比
  3. 簡化測試: 逐步移除複雜邏輯,找到問題根因
  4. 漸進修復: 優先恢復功能,再考慮架構優化
  5. 文檔更新: 記錄問題原因和解決方案

架構決策標準

  • 3 個模組以下: 使用直接的 View → Composable → Service
  • 複雜業務邏輯: 引入 ServiceFactory 統一管理
  • 多種實現需求: 考慮介面抽象和工廠模式
  • 運行時切換: 只有確實需要時才引入配置驅動

相關文檔和資源

相關開發筆記

技術參考

  • Vue 3 Composition API 最佳實踐
  • TypeScript 類型系統設計
  • Supabase Edge Functions vs 前端分析的架構選擇

測試和驗證

  • 分析模組功能測試清單
  • 架構一致性檢查清單
  • 效能和可維護性評估標準

文檔版本: v1.0
建立日期: 2025-08-23
最後更新: 2025-08-23
負責人: 系統架構優化團隊
狀態: 執行中