Skip to content

enhancement(core): BaseCRUDVM 支援 optimistic concurrency,並行編輯時顯示衝突提示 #620

@cct08311github

Description

@cct08311github

問題描述

使用者在多個瀏覽器 Tab 中開啟同一筆記錄進行編輯時,後儲存者會靜默覆蓋先儲存者的修改,沒有任何衝突警告。這在多人協作環境(如業務多人編輯同一客戶資料)下會導致資料遺失,且無任何稽核軌跡。

業界對比

EF Core 內建 [ConcurrencyCheck] / [Timestamp] + DbUpdateConcurrencyException 機制。Django 用 version field 偵測衝突並提示使用者。Google Docs 用 OT 算法實時同步,其他企業系統至少要做到「最後寫入者警告」。

建議修正方向

作為 opt-in 功能,不強制所有模型啟用:

  1. 模型層:在 Model 上添加 [Timestamp] 屬性(EF Core RowVersion),EF Core 自動進行樂觀鎖

    [Timestamp]
    public byte[] RowVersion { get; set; }
  2. VM 層BaseCRUDVM<T>.DoEdit() 捕獲 DbUpdateConcurrencyException,回傳 409 Conflict + 衝突資訊

  3. 前端framework_layui.js 的 form submit handler 偵測 409 回應,顯示「此記錄已被他人修改,請重新載入後再編輯」dialog,提供「重新載入」和「強制覆蓋」兩個選項

  4. 文件:在 WTM Developer Manual 說明如何在 Model 啟用此功能

驗收標準

  • 模型加入 [Timestamp] 後,並行編輯觸發 409 回應
  • 前端顯示衝突提示 dialog(非靜默覆蓋)
  • 未啟用的模型行為完全不變(向後相容)
  • MSTest 覆蓋並行更新衝突情境
  • Developer Manual 新增 Optimistic Concurrency 章節

Priority: P2 — 需改動 VM 基底層,成本較高,但對多人協作場景是關鍵架構改善
Labels: enhancement, core

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Priority 2enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions