VetoableChangeListener

VetoableChangeListener

我对VetoableChangeListener的设计有疑问。我实现了VetoableChangeListener接口以侦听模型类中属性的更改,因此在模型触发时

vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException


…我尝试将更改保存在数据库中,这可能会失败(例如,通过SQLException)。如果失败,则抛出PropertyVetoException还原模型中的更改。

该模型委派给VetoableChangeSupport(JDK类),该模型在接收到PropertyVetoException时会捕获该模型并通知将所有VetoableChangeListener恢复为oldValue,而将newValue / PropertyVetoException互换(之后将其重新抛出)。例外),以便该事件再次出现在我的班级上,并且我尝试再次保存在DB中,依此类推...

我有一个解决方法,就是在没有人抛出VetoableChangeListener之前,模型不会改变,因此在中,我首先检查要保存在数据库中的数据是否不等于数据库中的数据。模型,如果相等,我将忽略更改。

还有其他更好的解决方法吗?

最佳答案

您的“解决方法”并不是真正的解决方法,但实际上听起来像是对我来说合适的解决方案:在尝试“更改”持久化版本之前,确认对象的当前状态确实存在更改。这也将更加有效(数据库访问非常昂贵)。

10-06 09:08