我不知道如何使用事务数据库实现用户友好界面的撤销属性.
一方面,建议用户拥有,因为它是说多(无限)撤销的可能性在这里的答案.可能有助于此问题的模式是Memento 或Command.
但是,使用包含触发器,不断增长的序列号和不可逆转的过程的复杂数据库,很难想象撤消操作如何在不同于事务边界的点处起作用.换句话说,撤消到最后一次提交的事务只是回滚时,但是如何回到不同的时刻呢?
更新(基于到目前为止的答案):我不一定希望撤消在修改已经提交时有效,我将专注于具有开放事务的正在运行的应用程序.每当用户点击保存时,它意味着提交,但在保存之前 - 在同一事务期间 - 撤消应该有效.我知道使用数据库作为持久层只是一个实现细节,用户不应该为此烦恼.但是,如果我们认为"在数据库和GUI中撤消的想法是根本不同的东西",并且我们不对数据库使用撤销,那么无限撤消只是一个流行语.我知道"回滚是......不是用户撤消".
那么如何在同一个事务中给出"由于任何更改而产生的级联效果",实现客户端级撤销?
在数据库和GUI中撤消的想法是根本不同的事情; GUI将成为单个用户应用程序,与其他组件的交互水平较低; 数据库是一个多用户应用程序,其中更改可以具有由于任何更改而产生的级联效果.
要做的是允许用户尝试将之前的状态应用为新事务,这可能会也可能不会起作用; 或者只是在提交后没有撤消(类似于保存后没有撤消,这是许多应用程序中的一个选项).