我有一个独立的 java 应用程序,其中来自 GUI 的一个函数调用将导致不同类的实例变量发生多次更改。我们想为此编写一个事务管理器,以便如果抛出一些异常,则在执行之前在内存中完成更改块被还原。我们当然可以通过在调用之前创建实例变量的副本并在发生异常时还原更改来以一种天真的方式做到这一点,但我正在寻找一些复杂且良好的设计来处理这个问题。
请让我知道是否有人知道一些可用于解决此问题的框架或通用设计。
我有一个独立的 java 应用程序,其中来自 GUI 的一个函数调用将导致不同类的实例变量发生多次更改。我们想为此编写一个事务管理器,以便如果抛出一些异常,则在执行之前在内存中完成更改块被还原。我们当然可以通过在调用之前创建实例变量的副本并在发生异常时还原更改来以一种天真的方式做到这一点,但我正在寻找一些复杂且良好的设计来处理这个问题。
请让我知道是否有人知道一些可用于解决此问题的框架或通用设计。
您可以使用 Memento 设计模式来存储对象的状态。如果一切顺利,您将删除最后存储的状态。如果有问题,你恢复上一个状态。这是一个参考(很差)http://en.wikipedia.org/wiki/Memento_pattern。试试谷歌了解更多详情。
Memento 的工作方式与您所说的类似,但它形式化了一个架构来提供此功能。
将对象克隆(通过克隆/序列化和反序列化或其他机制)到事务视图并将状态传播回(隐藏的)已提交实例(结合基于版本计数器的 optimistc 锁定机制)是一种常见的方法。(例如 https://github.com/JanWiemer/jacis事务对象存储使用它...)