<分区>
我在内存中为每种类型的数据使用 POCO(类对象)。我有一组 myraid 函数可以对这些函数进行操作并以不同的方式修改它们。在对代码进行最少更改的情况下实现撤消/重做功能的简单方法是什么?一些想法:
使用 ORM 记录更改 - Property-level logging - 修改 POCO 的方法应该记录他们修改的每个属性,或者通过 ORM 修改属性而不是直接在所述 POCO 上操作。 ORM 将记录更改并能够在需要时恢复。
深度克隆和差异化 - Memento pattern - 在修改对象之前保存对象的深度克隆(浪费内存,速度慢)。修改完成后,调用一个计算对象属性差异的函数(必须遍历所有 props,缓慢、乏味、递归)。差异存储在日志中,以便日后恢复。
每个命令都支持撤消/重做 - Command pattern - 经典方法,但需要对代码添加太多内容。我正在寻找通用的东西,最好是不需要从头开始重写应用程序的东西。
我不知道解决这类问题的典型方法,但考虑到它相当普遍,我确信有很好的模式可以轻松解决这个问题。您是否知道以简单方式处理 POCO 历史记录的任何模式/库?
我目前正在审查以下内容,但仍在寻找更好的方法。
- http://www.codeproject.com/Articles/43436/Undo-Redo-Framework
- http://www.codeproject.com/Articles/10947/A-simple-framework-for-adding-undo-redo-support
- http://www.codeproject.com/Articles/456591/Simple-Undo-redo-library-for-Csharp-NET
- http://www.codeproject.com/Articles/1356/Undo-Manager
- http://www.codeproject.com/Articles/10576/An-Undo-Redo-Buffer-Framework
- http://www.codeproject.com/Articles/19550/Automated-Undo-Redo-library-based-on-Csharp-Generi
- http://www.codeproject.com/Articles/33371/Multilevel-Undo-and-Redo-Implementation-in-Csharp-