子类计算值的最佳设计模式?

时间:2011-02-09 03:27:12

标签: .net design-patterns calculated-field

说我有两种类型:

ClassA
{
    int ValueA;
    int CalculatedA;
}

ClassB
{
    int ValueA;
    int CalculatedA;

    int ValueB;
    int CalculatedB;
}

CalculatedB需要ValueA以及ValueB。我正在尝试确定实现这一目标的最佳模式。

选项1:子类ClassA并添加额外值。有一个在子类中重写的公共Update()方法。这是模型中的简单代码,但是创建这些类的代码需要事先知道要创建哪些代码,并且迭代这些类型列表的任何代码都需要进行类型检查以处理额外的字段。

选项2:在单独的类中拥有额外的属性,并在那里拥有CalculatedB的更新代码。这个问题是ClassB然后需要某种方式来了解何时更新ValueA,并且我希望不必在这些类上实现INotifyPropertyChanged之类的东西。另一种方法是在额外属性类上使用某种公共Update方法,并在更新ValueA时让主类调用该方法。也不可取。

选项3 ClassB ValueBCalculatedB属于可空类型。通过。

还有吗?你会选择哪个?

1 个答案:

答案 0 :(得分:1)

如果ClassB与ClassA无关,那么子类化不是一个好方法。顺便说一句,在.Net中,我们通常不公开公共字段,而是暴露公共属性(假设为C#)

public class ClassA{
    public int ValueA {get;set;}
    //...
}

由于ClassB.CalculateB严重依赖于ValueA,为什么不只是动态计算值,因此您不必担心属性更改。

public class ClassB {
    public int ValueB {get;set;}
    public int getCalculateB(ClassA a){
        //...
    }
}