principle-boundary-discipline | 在系統邊界驗證資料
本頁以 pstack-claude 0.9.126 為基準。原文標示 user-invocable: false,通常由 poteto-mode 按需讀取。本頁用自然語言示範如何套用,不提供獨立啟動命令。
定位與適用情境
系統邊界(System Boundary)是外部資料進入內部模型的地方,例如命令列參數、設定檔或網路回應。應在這裡完成驗證、型別縮窄(Type Narrowing)與錯誤處理,而不是讓每一層都重新猜測資料是否有效。
例如排程工具從設定檔讀取執行時間,再交給排程計算函式。若讀檔層、排程層與顯示層都重複檢查同一個欄位,錯誤訊息可能互相矛盾。目標是讓設定解析一次產生可信任的領域型別(Domain Type),計算層只處理合法狀態。
準備
- 找出設定檔進入系統的路徑、所有呼叫端及既有驗證位置。
- 準備一份合法設定、一份缺少必要欄位的設定與一份格式錯誤的設定。
- 寫出內部計算真正需要的資料形狀,不把讀檔工具或框架的私有物件當成領域模型。
- 確認外部錯誤應如何回報,以及哪一層負責呈現給使用者。
操作步驟
- 畫出資料流與信任轉換點。 標出原始位元組、解析後的未知資料、已驗證領域資料各在哪裡。問每個檢查「資料現在是否正在跨越系統邊界」。
- 在入口完成解析與驗證。 把缺欄位、格式錯誤等外部輸入轉成明確錯誤。能作為純轉換的解析函式,就以輸入到型別化結果的方式設計;讀檔與輸出錯誤留在外殼。
- 讓內部計算保持純粹。 純函式(Pure Function)只接收領域資料、回傳排程結果,不讀設定檔,也不依賴框架。先查證所有呼叫端都會經過正確邊界,才移除重複驗證。
- 整理公開介面。 對外提供排程所需的領域概念,不重新匯出儲存層或框架的私有表示。一般機制留在內部,特定情境的政策留在邊緣介接處。
- 分別驗證兩側。 非法設定應在入口得到可理解的錯誤。合法領域資料應能在不啟動框架的測試裡得到預期排程。檢查錯誤仍能向外傳遞,沒有被靜默吞掉。
可直接使用的提示詞
套用 principle-boundary-discipline。
這個排程工具從設定檔取得執行時間,內部多層重複檢查欄位。
請先追蹤所有入口與呼叫端,列出原始資料轉成領域型別的邊界。
提出最小整理方案,讓外部輸入在入口驗證,內部排程計算使用純函式。
不要直接刪掉所有檢查。先證明每條呼叫路徑的輸入都經過邊界。
驗收須涵蓋合法設定、缺欄位、格式錯誤,以及不依賴框架的計算測試。
只修改核准的來源與測試,不更動正式設定。
預期結果與驗收
預期得到清楚的入口解析、型別化計算與薄外殼。驗收不只是檢查防禦判斷變少,還要看到錯誤設定在邊界被拒絕,而且錯誤位置與原因能被使用者辨認。
維護者應能直接以領域資料測試排程計算,不需要建立網路、檔案或框架環境。公開型別也不應強迫呼叫端理解底層傳輸或儲存格式。
常見誤用是用型別斷言假裝已驗證外部資料,或以「相信內部」為由刪掉真正外部入口的檢查。型別可信任的前提,是邊界確實完成了轉換,而不是只換了名稱。
限制與權限
本原則不要求忽略網路失敗或外部服務錯誤。新接入的外部來源仍是新邊界,必須重新判定。內部型別也不能替未驗證的執行期資料背書。
公開介面變更可能影響呼叫端。應先盤點相依關係,在核准範圍內一起遷移與測試。教學不授權修改正式設定或移除專案必要的安全檢查。
延伸閱讀與來源
排程工具案例是本頁教學示例。邊界驗證、信任內部型別與純函式組織方式依據上游原則。