我已经做了一些研究,以了解如何实现这个问题的标题。我正在开发的应用程序已经开发了几年左右(尽管进展缓慢,你们都知道它是如何在真实世界中)。现在我需要放入撤销/重做多级功能。现在说“在开始之前你应该考虑过这个问题”有点晚了......呃,我们确实考虑过这个问题 - 而且我们对此没有采取任何措施,现在就是这样。从摸索SO(和外部链接),我可以看到,这两个最常见的方法似乎是...在已经功能的应用程序中撤消WPF/C#中的重做
Command模式看起来这将是一个地狱很多工作,我只能想象它会在这个过程中抛出成千上万的错误,所以我并不喜欢那个。
Memento模式实际上很像我在我脑中为此所做的。我正在考虑是否有办法快速获取当前内存中的对象模型的快照,然后我可以将它存储在某处(也可能存储在内存中,也可能存储在文件中)。这似乎是一个好主意,我能看到的唯一问题就是它如何与我们已经写过的内容整合。您可以看到应用程序,因为它可以在大面板中绘制图像(可能有数百个),然后允许用户通过UI或通过自定义构建的属性网格来操作它们。整个应用程序与大观察员模式相关联。第二件事情发生了变化,事件被解雇了,所有需要更新的事情都发生了。这很好,但我不能帮助你想,如果用户在属性网格中输入文本到texfield,那么在用户界面赶上之前会有一点延迟(看起来每次用户按下一个键时都会添加一个新的快照到撤消列表)。所以我对你的问题是......
- 你知道任何可以替代Memento模式,可能工作。
- 您是否认为Memento模式适合这里,或者它会让应用程序的速度变慢。
- 如果Memento模式是要走的路,那么创建对象模型快照的最有效方法是什么(我在想连载它或什么)
- 如果快照存储在内存中或者是否可能把它们放到文件中?
如果你有这么多,谢谢你的阅读。你有任何输入将是有价值的,非常感谢。
+1当你说撤销/重做你自动说命令模式。无论简单还是难以实施。 – 2010-12-02 18:16:03
目前的应用程序完全与观察员联系。让应用程序创建一个“纪念品”就像编写函数来创建它,然后订阅看守人到所需的观察者一样简单。我没有把心放在纪念品上,但我倾向于它。否则我会很高兴地相信。 – DrLazer 2010-12-02 18:28:20