您的位置:首页 > 其它

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

2013-04-12 17:20 183 查看

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

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

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

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

模板方法模式

public abstract class TemplateClass
{
public void Do()
{
DoCommonStep1();
DoCustomStep2();
DoCommonStep3();
}

private void DoCommonStep1(){}
protect abstract void DoCustomStep2(){}
private void DoCommonStep3(){}
}


回调机制

public class TaskClass
{
public void Do(Action callback)
{
DoCommonStep1();
callback();
DoCommonStep3();
}
}


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

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

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

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

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

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

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

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

职责过多的方法

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

原因:懒惰。

方案:提取公共子方法。

职责过多的继承体系

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

原因:职责过多。

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

public class A
{
public void N(){}

public void M()
  {
  this.策略.M();
}
}


显而易见的注释

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

原因:强迫症。

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

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

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

原因:技术能力。

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

文档中知识的重复

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

原因:流程和制度问题。

方案:目前没有想到好的思路(待续)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: