我有一个带有大约20个属性的类,但我将其简化为以下问题:

public class Product
{
   public int Id { get; set; }
   public string Name { get; set; }
}

我想要一个类或属性来标识我的类(class)是否肮脏。我的意思是确定其任何值是否已更改?

我可以采用3种设计方法:

1)
在类中设置属性时,我检查属性IsDirty。
public string Name
{
    get { return this._name; }
    set { if (this._name != value) { this.IsDirty = true; this._name = value; }
}

2)
从类外部设置属性时,我检查属性IsDirty。

例如
if (p.Name != newName)
{
 p.IsDirty = true;
 p.Name = newName;
}

这种方法迫使我在客户端类中添加许多ifs。有些属性甚至是集合,甚至是引用对象,因此行数甚至会增加。

3)
当准备好保存对象时,我将通过获取克隆的对象并检查其相等性来检查是否有任何属性IsDirty。

这将导致性能变差,因为我将不得不再次克隆或加载原始对象,然后逐一比较属性。

哪一个是最好的设计?还是有其他设计模式可以帮助您呢?

最佳答案

另一个选择是实现INotifyPropertyChanged接口(interface)。

请注意,这将帮助您使事情更整洁,使API更加清晰,但就跟踪变更后的内部实现而言,仍然需要您实现。我认为这与您的Option #1配合得最好

关于c# - 如何设计类属性是否已更改?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21234907/

10-13 08:07
查看更多