我对 a 的设计有疑问VetoableChangeListener
。我实现了VetoableChangeListener
接口来监听模型类中属性的变化,所以当模型触发时
vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException
…我尝试将更改保存在数据库中,这可能会失败(SQLException
例如,通过)。如果失败,我会抛出一个PropertyVetoException
来恢复模型中的更改。
该模型在一个VetoableChangeSupport
(JDK类)中进行委托,当它接收PropertyVetoException
到它并通知恢复到ALL时VetoableChangeListener
,使用oldValue
/newValue
交换(后来它重新抛出异常),以便事件再次出现在我的类中,我尝试再次保存在数据库中,等等......
我有一个解决方法,即模型在没有人抛出 a 之前不会改变PropertyVetoException
,所以在VetoableChangeListener
我首先检查我要保存在数据库中的数据是否不等于模型中的数据,如果它相等我只需忽略更改。
还有其他更好的解决方法吗?