好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

重复的方式以及如何消除重复

重复的方式以及如何消除重复

重复的方式以及如何消除重复

有意识重复(懒惰的重复)

问题:A处的代码和B处的代码很相似,但是又不完全相同。

原因:开发人员的懒惰或技能不足,进行的是拷贝式的开发。

方案:引入模板方法模式或回调机制(函数指针、委托和接口)。

模板方法模式

  1   public   abstract   class   TemplateClass
   2   {
   3       public   void   Do()
   4       {
   5           DoCommonStep1();
   6           DoCustomStep2();
   7           DoCommonStep3();
   8       }
   9  
 10       private   void   DoCommonStep1(){}
  11      protect  abstract   void   DoCustomStep2(){}
  12       private   void   DoCommonStep3(){}
  13  }

 回调机制

 1   public   class   TaskClass
  2   {
  3       public   void   Do(Action callback)
  4       {
  5           DoCommonStep1();
  6           callback();
  7           DoCommonStep3();
  8       }
  9  }

无意识的重复(重复自己)

问题:A处的代码和B处的代码虽然不相似,但是完成的任务很相似(知识重复了)。

原因:技能不足、缺少知识库、缺少深入的思考。

方案:提升自己的技能;整理自己的知识库;多锻炼自己的抽象思维能,有些问题看似不一样,但是从技术上进行抽象会发现它们有很多一致性,如:树的遍历和展示。

无意识的重复(重复他人)

问题:A处的代码和B处的代码虽然不相似,但是完成的任务很相似(知识重复了)。

原因:缺乏沟通、缺乏机制。

方案:多沟通,在内部多沟通,在社区多沟通;建立良好的沟通和复用机制,在体制和文化上鼓励复用。

职责过多的方法

问题:A方法完成任务T1和T2,B方法完成任务T2和T3,没有将T2提取为独立的方法。

原因:懒惰。

方案:提取公共子方法。

职责过多的继承体系

问题:A类完成任务M和N,A的子类A1完成任务M1和N1,A的子类A2完成任务M1和N2,M1出现了重复。

原因:职责过多。

方案:引入策略模式或桥模式。

 1   public   class   A
  2   {
  3          public   void   N(){}
  4      
 5          public   void   M()
  6         {
  7            this  .策略.M();
  8          }
  9  }

显而易见的注释

问题:程序中遍布各种无用的注释。

原因:强迫症。

方案:引入具备解释性的变量或子方法。

界面、领域和数据库中知识的重复

问题:添加一个数据库字段,需要修改领域模型和界面。

原因:技术能力。

方案:引入元数据驱动开发,采用代码生成器或元编程。

文档中知识的重复

问题:文档中的知识不匹配代码中的知识。

原因:流程和制度问题。

方案:目前没有想到好的思路(待续)。

框架地址: http://happy.codeplex.com/  
博客地址: http://www.cnblogs.com/happyframework/

 

分类:  Design Principle

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于重复的方式以及如何消除重复的详细内容...

  阅读:37次