我不知道如何使用事务数据库实现用户友好界面的撤消属性。
一方面,建议用户具有多级(无限)撤消的可能性,如答案中所述。可能有助于解决此问题的模式是Memento 或Command。
然而,使用包含触发器、不断增长的序列号和不可逆过程的复杂数据库,很难想象撤消操作如何在事务边界之外的不同点工作。换句话说,撤消到最后一次提交的事务只是一个回滚,但是怎么可能回到不同的时刻呢?
更新(基于到目前为止的答案):我不一定希望在修改已经提交时撤消工作,我会专注于具有开放事务的正在运行的应用程序。每当用户单击保存时,这意味着提交,但在保存之前 - 在同一事务期间 - 撤消应该起作用。我知道使用数据库作为持久层只是一个实现细节,用户不应该为此烦恼。但是,如果我们认为“数据库中的撤消和 GUI 中的撤消概念是根本不同的东西”并且我们不对数据库使用撤消,那么无限撤消只是一个流行词。我知道“回滚是......不是用户撤消”。
那么如何在同一个事务中实现“任何更改导致的级联效果”的客户端级撤消呢?