Spiga

一天一个重构方法(35):删除中间人

2009-09-25 11:58:55

Remove Middle Man:删除中间人

有时你的代码里可能会存在一些“Phantom”或“Ghost”类,Fowler 称之为“中间人(Middle Man)”。这些中间人类仅仅简单地将调用委托给其他组件,除此之外没有任何功能。就应该删除这个类,让客户直接调用受托类

public class Consumer
{
	public AccountManager AccountManager { get; set; }
	public Consumer(AccountManager accountManager)
	{
		AccountManager = accountManager;
	}
	public void Get(int id)
	{
		Account account = AccountManager.GetAccount(id);
	}
}
public class AccountManager
{
	public AccountDataProvider DataProvider { get; set; }
	public AccountManager(AccountDataProvider dataProvider)
	{
		DataProvider = dataProvider;
	}
	public Account GetAccount(int id)
	{
		return DataProvider.GetAccount(id);
	}
}
public class AccountDataProvider
{
	public Account GetAccount(int id)
	{
		// get account
	}
}

最终结果已经足够简单了。我们只需要移除中间人对象,将原始调用指向实际的接收者。

public class Consumer
{
	public AccountDataProvider AccountDataProvider { get; set; }
	public Consumer(AccountDataProvider dataProvider)
	{
		AccountDataProvider = dataProvider;
	}
	public void Get(int id)
	{
		Account account = AccountDataProvider.GetAccount(id);
	}
}
public class AccountDataProvider
{
	public Account GetAccount(int id)
	{
		// get account
	}
}