在许多情况下,您希望在对象首次实例化时保存对象的原始状态,以便能够将其当前状态与其原始状态进行比较,并确定对象在其生命周期内是否由用户或编程修改,并跟踪对象是否被修改和/或持久,比较当前值和原始值等
你是怎么做这个水管的?你是否使用了一些可以为你做管道工作的代码生成器?您是否了解任何正式的最佳实践?ReSharper将为您生成对象比较代码,但我没有找到任何可以生成其余管道的代码。。。
以下是我目前正在做的(简短、简单的版本):
public class MyObject : INotifyPropertyChanged
{
private int id;
public int Id
{
get { return id; }
private set { id = value; OnPropertyChanged("Id"); }
}
private string name;
public string Name
{
get { return name; }
set {
if (value == name) return;
name = value;
OnPropertyChanged("Name");
CheckIfModified();
}
}
public bool IsModified { get; private set; }
public bool IsPersistable { get; private set; }
public MyObject OriginalState { get; private set; }
public MyObject(int id, string name, bool saveOriginalState = false)
{
Id = id;
Name = name;
if (saveOriginalState) OriginalState = new MyObject(id, name);
}
///... More BI code (determine if modified/persistable etc...)
}
简单的方法(高级):
- 序列化原始对象。使用二进制、XML或JSON序列化。(对于步骤#3,XML和JSON将更容易)
- 使用与上一步相同的方法序列化可能修改的实例
- 比较两个序列化版本。如果它们相同,则表示对象没有更改