Snapshot 是某一時刻的狀態複本、凍結之後不隨來源資料的後續變更而改動。歷史訂單記錄下單當時的商品名稱與價格——商品後續改名、下架、調價,訂單仍顯示當時購買的內容。跟 live 參照相反:live 參照指向來源的當前狀態、來源改了就跟著變。兩者的選擇由「這筆資料有沒有成為事實」決定。凍結的是狀態;已發生的事實本身由 domain event 承載——snapshot 記「當時的世界長什麼樣」、event 記「當時發生了什麼」。

概念位置

Snapshot 跟 entity 的生命週期有關——概念成為歷史事實之後、live 內容參照要凍結。凍結的同時身份參照通常繼續承重(退貨鍵、取消鍵)。Snapshot 也是稽核的端點——記錄事件發生當下的世界、而不是現在的世界(見 狀態轉換與稽核軌跡)。

可觀察訊號

歷史記錄的顯示內容跟著現行資料變動(商品改名、訂單明細跟著變)——參照凍結時機漏掉了。進行中的資料不跟著最新狀態走(購物車品項的價格不跟會員身分變動)——凍結太早。

設計責任

凍結時機由業務對「過去」的要求決定——進行中的操作持 live 參照是正確的、成為事實之後凍結。業務流程有多個確認階段時、凍結時機取決於哪個階段之後的漂移對下游不可接受。凍結判準的完整展開見 entity 與 value object 的判準