通过GWT RPC更新对象很容易撤消。我们需要在内存中克隆前一个实体状态,并在撤消时应用它。
但是当我们使用RequestFactory时,没有具体的更新操作。RequestFactory将实体修改发送到服务器,并更新存储库实体本身。我们无法拦截更新进程。
我应该如何对使用RequestFactory进行的更新执行撤消?
发布于 2012-08-09 21:20:16
您应该考虑修改服务器端数据结构和表。在那里合并一个时态或双时态模型。不要试图在内存中保留实体的“旧”状态,或者拦截它们。使用时间字段保持实体的先前状态不变。撤消意味着通过时间戳定位以前的版本,并使其成为最新版本。您也可以同时跨多个实体类型执行此操作。
如果你愿意,你可以定期清理你的数据库并清理旧版本。时态写入的“仅附加”风格也可以产生性能优势。
发布于 2012-02-02 13:57:45
在您触发请求之前,请求工厂不会更新服务器实体。因此,您可以简单地避免调用fire(),以防止对服务器进行修改。希望这就是你的意思。你能发布代码来演示你更新实体的方式,以及你想要在哪里执行撤销吗?
发布于 2012-02-03 12:40:18
我不知道你是否愿意这么做。为此,假设你想撤销一个类的更改,比如Contact,添加一个相同类型的字段,类似于以前的状态(如果你不想让它影响你的持久化,就让它成为瞬态的),让这个类看起来像这样:
class Contact {
Integer id;
Integer version;
String name;
String phoneNumber;
//Transient
Contact previousState;
}现在,在persist调用中,将当前数据备份到previousState中,然后持久化当前Contact实体。在undo调用中,将数据从previousState复制到"this“。
撤销在服务器端没有任何意义,这样的事情必须在客户端进行管理。我还没有遇到任何需要在服务器上使用撤销功能的场景。因此,请列举您希望实现此目标的场景和代码。
https://stackoverflow.com/questions/8943082
复制相似问题