我有一个带有大约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/