当我使用unit of work pattern(使用JPA)时,我从存储库中获取一个实体,对其进行修改并将隐含的工作单元中的修改保存到数据库中。
现在我想知道如何使用工作单元模式执行验证。如果我将更改(从用户输入)应用到域对象并在此之后进行验证,则即使验证失败,也会更改该对象的值。避免将具有非法状态的对象写入数据库的方法是什么?退回工作单位?
OOP的目标之一是对象监视自己的状态,以便它们永远不会接受非法的值。对于这种方法,我不得不抛出异常,它与上面的bean验证(和弹簧验证)方法相反。但也许它更简单,更好。
您将使用哪种验证策略(在域驱动设计中)?
答案 0 :(得分:2)
避免将具有非法状态的对象写入数据库的方法是什么?退回工作单位?
如果您使用Bean Validation API,它将抛出异常并且不会保留更改(如果启用,则验证应该在PrePersist
,PreUpdate
的最后阶段进行,和PreRemove
生命周期事件)。
使用JPA 2.0,只需在类路径上放置一个Bean Validation实现。
使用JPA 1.0时,请参阅this previous answer。