假设我们有以下类:
class C
{
private readonly DataType data;
private readonly AdditionalType additional;
C(DataType newData)
{
data = newData;
// LONG code evaluating additional
}
C(OtherType newData)
{
// eval data from newData
// the same LONG code evaluating additional
}
}
在 C 的整个生命周期中,两者都data
保持不变。但是,有一种代码味道:在两个构造函数中,计算部分都加倍了。然后自然的选择是将其提取到另一种方法:additional
additional
class C
{
private readonly DataType data;
private readonly AdditionalType additional;
private void EvalAdditional()
{
// LONG code evaluating additional
}
C(DataType newData)
{
data = newData;
EvalAdditional();
}
C(OtherType newData)
{
// eval data from newData
EvalAdditional();
}
}
但随后附加不再是只读的(因为它没有在 ctor 中初始化)。
如何优雅地解决这个问题?