设计原则:重复的方式以及如何消除重复

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

问题: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 }

显而易见的注释

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

原因:强迫症。

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

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

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

原因:技术能力。

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

文档中知识的重复

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

原因:流程和制度问题。

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

posted on 2013-04-12 17:20  幸福框架  阅读(1442)  评论(3编辑  收藏  举报

导航

我要啦免费统计