• 31天重构指南之二十九:去除中间人对象


    今天要说的重构来自于Folwers的重构目录,你可以在这里查看。

    有时在你的代码会存在一些幽灵类,Fowler称它们为“中间人”,中间人类除了调用别的对象之外不做任何事情,所以中间人类没有存在的必要,我们可以将它们从代码中删除。

       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: }
     
    要对上面的代码应用重构是简单明了的,我们只需要移除掉中间人对象就可以了。
       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: }

    原文链接:http://www.lostechies.com/blogs/sean_chambers/archive/2009/08/28/refactoring-day-29-remove-middle-man.aspx

  • 相关阅读:
    正则表达式--验证中国手机号
    PostgreSQ数据库安全连接请求问题
    golang时间正反格式化
    Git 分支管理和冲突解决
    golang交叉编译
    ps命令
    Redis应用场景
    SecureCRT for Mac
    Redis作者谈Redis应用场景
    redis 五种数据的应用场景
  • 原文地址:https://www.cnblogs.com/zhangronghua/p/1597289.html
Copyright © 2020-2023  润新知