大量属性取决于其他属性
问题描述:
我们有一个约50〜60个属性的类,这些属性依赖于同一类的属性+某些其他类的属性。目前正在改变一个属性,我们正在提高其他20个属性的属性更改,这会使代码变得混乱和容易出错。处理这种情况的最佳方式是什么?任何建议的设计模式来解决这个问题?大量属性取决于其他属性
public class ClassA
{
public ClassB classB;
public int Prop1
{
get { return CalculateValueForProp1(); }
}
private int prop2;
public int Prop2
{
get { return prop2; }
set
{
prop2 = value;
OnPropertyChange(nameof(Prop2));
OnPropertyChange(nameof(Prop1));
}
}
private int prop3;
public int Prop3
{
get { return prop3; }
set
{
prop3 = value;
OnPropertyChange(nameof(Prop3));
OnPropertyChange(nameof(Prop1));
}
}
public int CalculateValueForProp1()
{
return (this.prop2 * 10 + this.Prop1 * 20 + classB.AnotherProperty*10);
}
}
答
尝试将属性的依赖关系映射到对象结构。因此你必须找到属性之间的依赖关系。
如果您设法让基类定义“基本”属性,则可以派生出承载依赖(例如计算)属性的类。因此,如果基本属性发生更改,则派生类也应该使用此事件,更新其属性并激发其自己的事件。
未经检验的,但我希望你明白了吧:
public class ClassA
{
private int prop2;
public int Prop2
{
get { return prop2; }
set
{
prop2 = value;
OnPropertyChange(nameof(Prop2));
}
}
private int prop3;
public int Prop3
{
get { return prop3; }
set
{
prop3 = value;
OnPropertyChange(nameof(Prop3));
}
}
}
public ClassB classB
{
public ClassB(ClassA classAinstance)
{
classAinstance.PropertyChanged += (s,e) => OnPropertyChange(nameof(Prop1));
}
public int Prop1
{
get { return (this.prop2 * 10 + this.Prop1 * 20 + classB.AnotherProperty*10); }
}
}
+0
我已经添加了示例代码,可能会有所帮助。 – user8562599
打破它,许多较小的班用更少的责任在任何类 –
50〜60个属性仅仅是在一类太多的代码。这是基本原则,像你不会像这样膨胀一类的担心分离。所以解决方案与属性无关,并且会基础。 – Christopher
您可以使用''“'属性名称['INotifyPropertyChanged.PropertyChanged'](https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.propertychanged.aspx)事件',这将会使用* one *事件使所有*属性失效。最好的做法是实际执行[代码审查](https://codereview.stackexchange.com/)。 – Sinatr