2010-06-08 31 views
2

當我使用unit of work pattern(與JPA)時,我從存儲庫中獲取一個實體,對其進行修改並將修改隱含地保存到數據庫中。工作單元模式的驗證策略

現在我想知道如何使用工作單元模式進行驗證。如果我將更改(從用戶輸入)應用到域對象並在其後進行驗證,則即使驗證失敗,該對象的值也會更改。避免用數據庫寫非法狀態的對象的方法是什麼?回滾工作單元?

面向對象的目標之一是,對象監視自己的狀態,以便他們永遠不會接受非法值。對於這種方法,我不得不拋出異常,這與上面的bean驗證(和spring驗證)方法相反。但也許它更簡單,更好。

你會使用什麼驗證策略(在域驅動設計中)?

回答

2

避免將具有非法狀態的對象寫入數據庫的方式是什麼?回滾工作單元?

如果使用Bean驗證API,它會拋出一個異常和變化不會被持久化(如果啓用,驗證應該在的PrePersistPreUpdate最後階段發生,PreRemove生命週期事件) 。

使用JPA 2.0,只需在類路徑中添加一個Bean驗證實現。

有了JPA 1.0,請參閱this previous answer

+0

要添加到答案,我很確定jpa(或hibernate)有一些非常具體的警告,反對在setter中使用數據驗證。 「在返回之前我們如何初始化對象是我們自己的事情,並且可以不止一次地調用setter」。 – 2010-06-08 20:01:50