将中间系统状态存储为临时文件或字符串? (对于 undo/redo)
Storing intermediate system states as temporary file or string? (for undo/redo)
我有一个图形系统,用户可以在其中 draw/edit 一些基本形状,例如直线、贝塞尔曲线等。
任何时候我都有信息,我可以保存这些信息以便以后按原样重现场景。
为了实现撤消-重做功能,我计划在场景发生变化时保存此信息(如 move/draw 动作),然后再重现此信息。
我已经拥有以自定义格式将此信息导出为文件的功能。
我想知道将绘图的中间阶段存储为一系列临时文件是否是个好主意,或者我应该将此信息存储为字符串列表。
这些技术中是否有 advantages/disadvantages 优于其他技术?
人们在图形工具中遵循的总体趋势是什么?
class逻辑方法在 "Design Patterns" 四人组中进行了描述。基本上,您将实现一个命令 class,并将其派生到 MoveCommand、RotateCommand 等中。每个实例都存储执行该命令所需的信息(例如移动元素时的增量和增量)。命令执行后,将其存储在撤消队列中。当用户选择 'undo' 时,您会在命令实例上调用另一个原语 undo(),它基本上做相反的事情(所以在我们的例子中它会移动 -deltax 和 -deltay)。这可以为任何命令实现。
虽然这种方法在实践中效果很好并解决了大量问题,但我自己的经验是它也会导致脆弱的 undo/redo 队列,因为一旦其中一个命令无法处理'undo' 正确(或根本),无法进一步撤消。
您在每一步捕获绘图状态的提议将需要更多内存。作为交换,您根本不需要执行命令 class 以确保一切都可以撤消。
我有一个图形系统,用户可以在其中 draw/edit 一些基本形状,例如直线、贝塞尔曲线等。
任何时候我都有信息,我可以保存这些信息以便以后按原样重现场景。
为了实现撤消-重做功能,我计划在场景发生变化时保存此信息(如 move/draw 动作),然后再重现此信息。
我已经拥有以自定义格式将此信息导出为文件的功能。
我想知道将绘图的中间阶段存储为一系列临时文件是否是个好主意,或者我应该将此信息存储为字符串列表。
这些技术中是否有 advantages/disadvantages 优于其他技术?
人们在图形工具中遵循的总体趋势是什么?
class逻辑方法在 "Design Patterns" 四人组中进行了描述。基本上,您将实现一个命令 class,并将其派生到 MoveCommand、RotateCommand 等中。每个实例都存储执行该命令所需的信息(例如移动元素时的增量和增量)。命令执行后,将其存储在撤消队列中。当用户选择 'undo' 时,您会在命令实例上调用另一个原语 undo(),它基本上做相反的事情(所以在我们的例子中它会移动 -deltax 和 -deltay)。这可以为任何命令实现。
虽然这种方法在实践中效果很好并解决了大量问题,但我自己的经验是它也会导致脆弱的 undo/redo 队列,因为一旦其中一个命令无法处理'undo' 正确(或根本),无法进一步撤消。
您在每一步捕获绘图状态的提议将需要更多内存。作为交换,您根本不需要执行命令 class 以确保一切都可以撤消。