一天一个重构方法(15):用显式方法替换参数
2009-06-12 04:26:49你有一个方法,其内部完全取决于参数值而采取不同反应,针对该参数的每一个可能值,建立一个独立方法。
public void SetValue(string name, int value)
{
if (name.Equals("Height"))
{
_height = value;
return;
}
if (name.Equals("Width"))
{
_width = value;
return;
}
}
重构之后变成两个函数,从函数名就能知道函数的功能了,而不用多传一个参数
public void SetHeight(int height)
{
_height = height;
}
public void SetWidth(int width)
{
_width = width;
}
该重构方法恰恰相反于Parameterize Method。如果某个参数有离散取值,而方法内又以条件式检查这些参数值,并根据不同参数值做出不同的反应,那么就应该使用本重构。调用者原本必须赋予参数使用,以决定方法做出何种响应;现在,你提供了不同的方法给调用者使用,就可以避免出现条件式。但是,如果参数值不会对方法行为有太多影响,就不应该使用本重构。这种情况下就只需要通过参数为一个字段赋值,那么直接使用set属性就行了。如果你的确需要条件判断式行为,那可以先不考虑该重构。