我正在编写一个桌面应用程序来用 C++ 进行矢量绘图,并考虑使用 sqlite 来支持我的撤消/重做功能。
有人使用 sqlite 进行撤消/重做功能吗?它对你有什么影响?
澄清:
我知道堆栈方法,我什至用这种方法实现了一个应用程序。我遇到的问题是一段时间后很难维护。
我使用 sqlite 的意思是将我的整个内存数据结构映射到一个 sqlite 数据库中,并让 sqlite 为我做差异和修订。如果我创建内存数据库,速度应该不是问题。
这就是想法,我想知道这是否可行。
当 SQLite 数据库是应用程序的数据文件格式时,使用 SQLite 来支持撤消/重做是有意义的。有关如何使用 SQLite 触发器执行此操作的说明,请参阅SQLite 网站。
基本上,撤消/重做功能可以使用堆栈来实现:当用户执行操作时,您将一个对象压入堆栈,该对象表示操作前后状态之间的增量,当您撤消时,您“展开”三角洲。因为用户执行的每个操作都会在堆栈上创建一个新的增量对象,所以 sqlite 可能不是您选择的技术,因为它可能太慢了。我建议考虑仅将撤消/重做信息存储在内存中的可能性,并且仅当您想要实际保存撤消/重做历史记录时才将其线性化到磁盘上。
看看纪念品设计模式。
这是在 sqlite3 中对我有用的
BEGIN;
-- enter your INSERT, UPDATE or DELETE command
-- if you want to keep it then run command below
COMMIT;
-- to undo - run command below
ROLLBACK;