2

我正在做一个项目,我们希望保留特定对象的历史记录。在保存时,我想要一个对象上的方法来确定它是否已更改,以便我可以调用一个方法将其当前状态保存到历史记录。例如,我从用户进行更改(或可能不更改)的对象填充表单并提交来自。我想获取我的原始对象和已从表单更新的该对象的副本,并确定它是否已更改。此外,我可能会在某些时候决定某些属性无关紧要(例如,如果名称更改,我将不会跟踪它)。

我认为最简单/最灵活的方法是如果我可以提供我关心的自定义属性 [ChangeTracked] 的属性,然后我可以使用反射来获取具有该属性的所有属性的列表并遍历它们比较 A.property == B.property 以确定是否有任何更改。

这行得通吗?是否有更好/更简单的方法来处理这个问题,比如可以添加到对象以确定任何属性的值是否已更改的某种内置方法?无论解决方案如何,都将不胜感激一些伪代码。作为一个澄清点,解决方案需要确定我关心的值是否实际上已经改变,而不仅仅是它自创建以来是否已被分配,即如果我设置 Name="bob" 并且在我分配之前它已经是 "bob"这不算作改变。

4

2 回答 2

2

这并不花哨,但这是久经考验的真正蛮力方法。只需向名为 IsDirty 的对象添加一个私有属性。对于要跟踪的属性,只需将 IsDirty=True 添加到属性 Set 例程。对于更复杂的“我关心”规则,只需将它们编码到属性集中即可。

页面按钮的单击事件可以触发 Save 事件,该事件将文本框和下拉列表中的所有值写入对象属性,然后调用对象 Save 方法,该方法在执行任何操作之前测试 IsDirty 属性。

于 2010-12-20T22:29:52.013 回答
0

一种可能的方法是在加载对象时添加对象的深层副本作为对象的私有属性。(深拷贝的一种方法

在保存时,您可以将复制对象与“活动”对象进行比较,以查看是否发生了任何更改。

于 2010-12-20T22:22:36.570 回答