跳到主內容

Theme / 0.9.130

Pstack

用可驗證的工作流程協作,從單一入口學會工程技能

Skills

principle-model-the-domain | 用資料結構承載領域規則

以檔案上傳生命週期為例,將互相牽制的布林狀態改成明確模型,集中合法轉移與資料擁有權。

principle-model-the-domain | 用資料結構承載領域規則

本頁以 pstack-claude 0.9.126 為基準。原文設定 user-invocable: false,通常由 poteto-mode 按需讀取。用自然語言要求「套用 principle-model-the-domain」,請代理先找能承載規則的資料結構,而不是先增加條件分支。

定位與適用情境

領域模型(Domain Model)應表達實際允許的狀態、資料與規則。原文提供狀態機、具型別模型、查找表、事件模型與合適集合等方向,也明說不要強迫抽象。若現有程式清楚、局部且不易擴張,直接的實作可能更好。

本例的檔案上傳器以 isUploading、isComplete、hasError 控制畫面,偶爾同時顯示完成與失敗。輸入是現有旗標的讀寫位置、進度回呼與重試需求。目標是讓互斥狀態不再依賴各處自行同步。

準備

  • 提供所有旗標讀寫、上傳事件與取消事件的呼叫端,不能只看畫面元件。
  • 列出實際規則。例如只有成功狀態有結果識別碼,失敗狀態才有錯誤資訊。
  • 準備成功、失敗、取消與重試的事件序列,以及「完成後收到舊進度事件」的案例。

操作步驟

  1. 找出禁止狀態。 列出目前布林組合中哪些沒有業務意義,追查它們如何產生。也列出各個狀態真正需要的資料,不把所有欄位都設為可選。
  2. 比較最小模型。 本例可評估以判別聯集(Discriminated Union)表達待命、上傳中、成功與失敗,再用明確事件表達轉移。說明它消除了哪些非法組合,避免只換一套名稱。
  3. 集中規則擁有權。 將同一上傳生命週期的轉移與不變條件放在清楚的邊界,讓畫面讀取狀態。不要按載入、驗證、儲存等執行順序拆散同一條領域規則。
  4. 用事件序列檢查。 對成功、失敗、重試與過期回呼逐一列出預期結果。新增狀態後,確認消費者不能漏掉必要分支,且不再另存同步布林旗標。

可直接使用的提示詞

套用 principle-model-the-domain。請閱讀檔案上傳器及所有旗標讀寫位置,分析 isUploading、isComplete、hasError 的非法組合。
這輪只提出模型,不改檔案。比較目前布林旗標與最小狀態模型,列出各狀態必要資料、合法事件、轉移擁有者,以及如何處理舊進度回呼。
不要引入狀態管理框架。用成功、失敗、取消、重試的事件序列檢查方案,說明它實際移除了哪些分支、重複規則或生命週期風險。若簡單局部修改就足夠,也要明說。

預期結果與驗收

預期交付狀態與事件對照、資料形狀及消費者調整範圍。

  • 模型不能同時表達成功與失敗,必要欄位跟隨對應狀態。
  • 每條轉移規則只有一個明確擁有者,畫面不再各自同步旗標。
  • 過期事件的處理有明確規則,事件序列能檢查而非只看型別名稱。
  • 每個新增抽象都能指出刪除了什麼重複規則、非法狀態或風險。

限制與權限

常見誤用是為簡單流程建立大型框架,或只把旗標包進物件,仍允許所有非法組合。資料結構應減少理解與同步成本,而不是增加間接層。

具型別模型不會自動驗證外部輸入,也不能單靠型別阻止所有過期非同步事件。上傳例子的狀態名稱與轉移是教學方案,不是上游規定的通用狀態表。實作仍須遵守既有取消語意、權限檢查與專案修改範圍。

延伸閱讀與來源