Spiga

一天一个重构方法(8):封装条件

2009-05-21 10:03:42

Encapsulate Conditional:封装条件

当代码中充斥着若干条件判断时,代码的真正意图会迷失于这些条件判断之中。这时我喜欢将条件判断提取到一个易于读取的属性或方法中

public class RemoteControl
{
	private string[] Functions { get; set; }
	private string Name { get; set; }
	private int CreatedYear { get; set; }
	public string PerformCoolFunction(string buttonPressed)
	{
		// Determine if we are controlling some extra function
		// that requires special conditions
		if (Functions.Length > 1 && Name == "RCA" &&
		CreatedYear > DateTime.Now.Year - 2)
			return "doSomething";
	}
}

重构之后,代码的可读性更强,意图更明显:

public class RemoteControl
{
	private string[] Functions { get; set; }
	private string Name { get; set; }
	private int CreatedYear { get; set; }
	private bool HasExtraFunctions
	{
		get
		{
			return Functions.Length > 1 && Name == "RCA" &&
			CreatedYear > DateTime.Now.Year - 2;
		}
	}
	public string PerformCoolFunction(string buttonPressed)
	{
		// Determine if we are controlling some extra function
		// that requires special conditions
		if (HasExtraFunctions)
			return "doSomething";
	}
}