依赖于其他财产的大量财产

时间:2017-09-05 10:16:12

标签: c# design-patterns properties dependency-properties

我们有一个大约有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);
    }
}

1 个答案:

答案 0 :(得分:0)

尝试将属性的依赖关系映射到对象结构。因此,您必须找到属性之间的依赖关系。

如果您设法定义“基本”属性的基类,则可以派生具有依赖(例如计算)属性的类。因此,如果更改了基本属性,派生类也应该使用此事件,更新其属性并触发其自己的事件。

未经测试,但我希望你明白这一点:

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); }
    }
}