Spiga

一天一个重构方法(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属性就行了。如果你的确需要条件判断式行为,那可以先不考虑该重构。