Refactoring Day 29 : Remove Middle Man

Today’s refactoring comes from Fowler’s refactoring catalog and can be found here.

Sometimes in code you may have a set of “Phantom” or “Ghost” classes. Fowler calls these “Middle Men”. Middle Men classes simply take calls and forward them on to other components without doing any work. This is an unneeded layer and can be removed completely with minimal effort.

   1: public class Consumer

   2: {

   3:     public AccountManager AccountManager { get; set; }

   4:  

   5:     public Consumer(AccountManager accountManager)

   6:     {

   7:         AccountManager = accountManager;

   8:     }

   9:  

  10:     public void Get(int id)

  11:     {

  12:         Account account = AccountManager.GetAccount(id);

  13:     }

  14: }

  15:  

  16: public class AccountManager

  17: {

  18:     public AccountDataProvider DataProvider { get; set; }

  19:  

  20:     public AccountManager(AccountDataProvider dataProvider)

  21:     {

  22:         DataProvider = dataProvider;

  23:     }

  24:  

  25:     public Account GetAccount(int id)

  26:     {

  27:         return DataProvider.GetAccount(id);

  28:     }

  29: }

  30:  

  31: public class AccountDataProvider

  32: {

  33:     public Account GetAccount(int id)

  34:     {

  35:         // get account

  36:     }

  37: }

The end result is straightforward enough. We just remove the middle man object and point the original call to the intended receiver.

   1: public class Consumer

   2: {

   3:     public AccountDataProvider AccountDataProvider { get; set; }

   4:  

   5:     public Consumer(AccountDataProvider dataProvider)

   6:     {

   7:         AccountDataProvider = dataProvider;

   8:     }

   9:  

  10:     public void Get(int id)

  11:     {

  12:         Account account = AccountDataProvider.GetAccount(id);

  13:     }

  14: }

  15:  

  16: public class AccountDataProvider

  17: {

  18:     public Account GetAccount(int id)

  19:     {

  20:         // get account

  21:     }

  22: }

This is part of the 31 Days of Refactoring series. For a full list of Refactorings please see the original introductory post.

Related Articles:

Post Footer automatically generated by Add Post Footer Plugin for wordpress.

About Sean Chambers

I am a Senior software developer from Palm Coast, Florida. An advocate of Domain Driven Design, Behavior Driven Development, creator of FluentMigrator and community activist. I am married to my beautiful wife Erin and am the proud father of two wonderful children. I currently reside at ACI, a local insurance industry/mortgage software company that excels in creating solutions using Agile methodologies.
This entry was posted in Uncategorized. Bookmark the permalink. Follow any comments here with the RSS feed for this post.