持久化和使用原始业务对象状态的策略



在许多情况下,您希望在对象首次实例化时保存对象的原始状态,以便能够将其当前状态与其原始状态进行比较,并确定对象在其生命周期内是否由用户或编程修改,并跟踪对象是否被修改和/或持久,比较当前值和原始值等

你是怎么做这个水管的?你是否使用了一些可以为你做管道工作的代码生成器?您是否了解任何正式的最佳实践?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...)
}

简单的方法(高级):

  1. 序列化原始对象。使用二进制、XML或JSON序列化。(对于步骤#3,XML和JSON将更容易)
  2. 使用与上一步相同的方法序列化可能修改的实例
  3. 比较两个序列化版本。如果它们相同,则表示对象没有更改

最新更新