设计原则:重复的方式以及如何消除重复
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(); } }
显而易见的注释
问题:程序中遍布各种无用的注释。原因:强迫症。
方案:引入具备解释性的变量或子方法。
界面、领域和数据库中知识的重复
问题:添加一个数据库字段,需要修改领域模型和界面。原因:技术能力。
方案:引入元数据驱动开发,采用代码生成器或元编程。
文档中知识的重复
问题:文档中的知识不匹配代码中的知识。原因:流程和制度问题。
方案:目前没有想到好的思路(待续)。
相关文章推荐
- 重复的方式以及如何消除重复
- SQL Server 文档整理 - 4 如何找出重复数据以及怎样消除重复数据
- 手机客户端交互设计原则及信息展现方式
- 面向对象的设计方式处理Android编程中的GridView问题,以及自定义ListAdapter的使用
- chromium如何以json方式新增extension API以及添加内部扩展
- 总结: 重复提交、重复刷新、防止后退的问题以及处理方式
- WPF案例:如何设计搜索框(自定义控件的原则和方法)
- JSP 防止重复提交 防止重复刷新 防止后退问题以及处理方式
- 18.3.7 第5周 设计原则 5.1城堡游戏+5.2消除代码赋值+5.3封装
- 文本编辑器中,如何设计 撤销/重复栈
- ubuntu 下MySQL出现乱码的解决方法以及如何设置编码方式
- 设计模式-六大设计原则(附加实际开发建议以及计算器例子)
- 重复提交、重复刷新、防止后退的问题以及处理方式(转帖)
- 如何解决“未能在设计视图中打开,在中以不同方式将值括起来
- SPQuery如何消除重复记录(实现联动性)
- 微观SOA:服务设计原则及其实践方式
- 微观SOA:服务设计原则及其实践方式
- 面向对象的设计方式处理Android编程中的GridView问题,以及自定义ListAdapter的使用
- 在Oracle中如何删除表中设计重复数据
- Unity3D如何读取保存XML,以及用U3D内置方式保存文件