And*_*ndy 5 c# design-patterns reference
在我的应用程序中,我有一个数据对象集合,它们定义应用程序在执行时收集的数据类型。
用户可以打开一个对话框窗口来编辑这些对象,并且该对话框窗口包含绑定到集合的 DataGridView 实例。这意味着用户所做的任何更改都会立即应用,这是不好的。
另一个问题是该对话框窗口有一个“取消”按钮,允许用户放弃自打开该窗口以来所做的所有更改。
目前,当窗口打开时,我会序列化所有对象(浅复制不起作用),如果用户单击“取消”,那么我会反序列化它们以恢复它们。我遇到的问题是这很混乱。它更改了所有引用,其中一些对象还存储了未序列化的数据历史记录。然后,我必须让事件通过应用程序传递出去,以通知对象更新其引用等。这很痛苦。
有没有更好的方法来解决这个问题?
有一个更好的方法,使用框架中的接口 - IEditable
开始编辑
取消编辑 结束
编辑
基本思想是在调用 BeginEdit 时创建某个对象状态的快照。在 CancelEdit 上,您回滚到该 SavedState,并在 EndEdit 上提交它。
当然,细节决定成败。这是一个流行的链接,已作为一些想法的类似 SO 问题的实现答案
http://www.paulstovell.com/blog/runtime-ui-binding-behavior-ieditableobject-adapter
干杯,
贝里尔
注意:这在概念上与托科所说的没有什么不同,你应该给他答案。但值得在单独的答案中详细说明,因为它以 .Net 惯用方式形式化了这个概念,并提供了对有用实现的更多见解。此外,说惯用语这个词很有趣:--)