Fir*_*roz 17 c# frameworks undo-redo
我需要为我的窗口应用程序(像powerpoint这样的编辑器)实现撤消/重做框架工作,应该遵循的最佳实践,如何处理我的对象的所有属性更改以及它在UI上的反射.
Ben*_*ter 30
有两种经典模式可供使用.第一个是memento模式,用于存储完整对象状态的快照.这可能比命令模式更加系统密集,但它允许非常简单地回滚到较旧的快照.您可以将快照存储在磁盘上,然后将其存储在PaintShop/PhotoShop中,或者将它们保存在内存中,以用于不需要持久性的较小对象.你正在做的正是这个模式的设计,所以它应该比其他人建议的命令模式略好.
此外,另外需要注意的是,因为它不需要您使用相反的命令来撤消之前完成的操作,这意味着任何可能的单向函数[例如散列或加密]都无法通过倒数进行简单的撤消通过回滚到较旧的快照,可以非常简单地撤消命令.
同样如指出的那样,命令模式可能资源密集程度较低,因此我将在特定情况下承认:
命令模式可能更合适[但不一定,它将在很大程度上取决于情况].在其他情况下,我会使用memento模式.
我可能会避免使用这两者的混搭,因为我倾向于关心开发人员,这些开发人员会支持我,并维护我的代码以及我的雇主的道德责任,使这个过程变得简单和便宜可能.我看到这两种模式的混搭很容易变成一个难以维护的老鼠洞,这种老鼠难以维持.
这里有三种可行的方法.纪念模式(快照),命令模式和状态差异.它们都有优点和缺点.
如果你可以摒弃它,我会选择State Diffing,因为它结合了内存减少,易于实现和可维护性.
请注意,文章中提到的VoxelShop是开源的.所以你可以在这里看一下命令模式的复杂性:https: //github.com/simlu/voxelshop/tree/develop/src/main/java/com/vitco/app/core/data/history
以下摘自文章:
纪念品模式
优点
缺点
命令模式
优点
缺点
国家差异
优点
缺点/局限
参考:
https://www.linkedin.com/pulse/solving-history-hard-problem-lukas-siemon
| 归档时间: |
|
| 查看次数: |
9645 次 |
| 最近记录: |