敏捷开发、重构与设计模式
2009-12-09 09:11
225 查看
最近,同事、朋友跟我聊天的过程中,提到了设计模式方方面面的问题。随着面向对象、敏捷开发的深入人心,越来越多的程序员希望能够借助设计模式,使自己的代码更利于重用、更利于被人理解、可靠性更有保证。
不同的情况下需要用什么样的模式,如何实现这些模式,在各类著作中已经介绍的相当清晰了,但是关于设计模式实现的时机,却提的比较少。
过度设计
是指代码的灵活性和复杂性超出所需。如果我们在设计初期,就实现各类模式,进行完整的规划,随着需求的逐步修改,很可能出现大量的不再需要的设计,这完全不符合敏捷开发的思想。
设计不足
是指不良的开发方式导致后期难以维护。显然,如果我们不进行任何规划,随意的添加功能,就会使项目越来越混乱,以至于最后为了增加一些功能,不得不推倒重新设计。
不进行合理的规划是绝对不行的,而在初期就进行规划代价又太大,好像没有了解决的办法。但是,当你联想起TDD(测试驱动开发)的基本步骤,就会发现大部分的模式实现其实在重构过程中就能完成。
1.针对需求,编写测试用例;
2.编写权宜代码,使测试能够完全通过;
3.重构代码。
重构使代码更清晰、更易于维护,同时不需要初期花费大量的时间进行详细的规划。
模式痴迷
是指某人对模式过于依赖,以至于无法不在代码中实现模式。初学者为了练习所学的设计模式,会出现大量并不恰当的模式实现。熟练掌握各类设计模式的开发者,更也有可能出现这种依赖。在进行一项设计时,首先想到的就是它适用于哪种模式,甚至忘记了switch可能更简单、更易于理解。
在重构的过程中,什么情况下应该使用设计模式?应该用哪种模式?
不同的情况下需要用什么样的模式,如何实现这些模式,在各类著作中已经介绍的相当清晰了,但是关于设计模式实现的时机,却提的比较少。
过度设计
是指代码的灵活性和复杂性超出所需。如果我们在设计初期,就实现各类模式,进行完整的规划,随着需求的逐步修改,很可能出现大量的不再需要的设计,这完全不符合敏捷开发的思想。
设计不足
是指不良的开发方式导致后期难以维护。显然,如果我们不进行任何规划,随意的添加功能,就会使项目越来越混乱,以至于最后为了增加一些功能,不得不推倒重新设计。
不进行合理的规划是绝对不行的,而在初期就进行规划代价又太大,好像没有了解决的办法。但是,当你联想起TDD(测试驱动开发)的基本步骤,就会发现大部分的模式实现其实在重构过程中就能完成。
1.针对需求,编写测试用例;
2.编写权宜代码,使测试能够完全通过;
3.重构代码。
重构使代码更清晰、更易于维护,同时不需要初期花费大量的时间进行详细的规划。
模式痴迷
是指某人对模式过于依赖,以至于无法不在代码中实现模式。初学者为了练习所学的设计模式,会出现大量并不恰当的模式实现。熟练掌握各类设计模式的开发者,更也有可能出现这种依赖。在进行一项设计时,首先想到的就是它适用于哪种模式,甚至忘记了switch可能更简单、更易于理解。
在重构的过程中,什么情况下应该使用设计模式?应该用哪种模式?
代码坏味 | 重构方法 |
重复代码 | 形成Template Method 用Factory Method引入多态创建 链构造函数 用Composite替换一/多之分 提取Composite 通过Adapter统一接口 引入Null Object |
方法过长 | 组合方法 将聚集操作搬移到Collecting Paramter 用Command替换条件调度 将聚集操作搬移到Visitor 用Strategy替换条件逻辑 |
条件逻辑太复杂 | 用Strategy替换条件逻辑 将装饰功能搬移到Decorator 用State替换状态改变语句 引入Null Object |
基本类型迷恋 | 用类替换类型代码 用State替换条件改变语句 用Strategy替换条件逻辑 用Composite替换隐函树 用Interpreter替换隐式语言 将装饰功能搬移到Decorator 用Builder封装Composite |
不恰当的暴露 | 用Factory封装类 |
解决方案蔓延 | 将创建知识搬移到Factory |
相似功能的类 | 通过Apapter统一接口 |
冗赘类 | 内敛Singleton |
类过大 | 用Command替换条件调度语句 用State替换状态改变语句 用Interpreter替换隐式语言 |
分支语句 | 用Command替换条件调度程序 将聚集操作搬移到Visitor |
组合爆炸 | 用Interpreter替换隐式语句 |
怪异解决方案 | 通过Adapter统一接口 |
相关文章推荐
- 敏捷开发、重构与设计模式
- 《敏捷软件开发 原则、模式与时间》读后感 - 敏捷设计原则
- 包的设计原则,读敏捷软件开发 原则、模式和事件总结
- 敏捷软件开发:原则、模式与实践——第7章 什么是敏捷设计
- 灵活,可靠的软件 使用设计模式和敏捷开发
- 敏捷软件开发原则,模式与实践(c#)读书笔记(1)-重构
- 《敏捷软件开发-原则、模式与实践》-第七章 什么是敏捷设计
- 面向对象的设计原则【敏捷软件开发 原则、模式与实践】里面摘录
- 对《敏捷软件开发:原则、模式与实践》中保龄球程序重构的一些思考
- 章节 1.2 敏捷方法 – 灵活,可靠的软件 使用设计模式和敏捷开发
- 【敏捷软件开发:原则、模式与实践】之代码重构
- 章节 1.1 软件开发方法 – 灵活,可靠的软件 使用设计模式和敏捷开发
- 敏捷方法 – 灵活,可靠的软件 使用设计模式和敏捷开发
- 章节 1.3 极限编程 – 灵活,可靠的软件 使用设计模式和敏捷开发
- 《敏捷软件开发-原则、模式与实践》-第五章 重构
- 敏捷软件开发:原则、模式与实践——第5章 重构
- 章节 2.1 可靠的软件 – 灵活,可靠的软件 使用设计模式和敏捷开发
- tdd,设计模式,重构在软件开发中的概念和角色辨析
- 《敏捷软件开发 原则、模式与时间》读后感 - 敏捷设计原则
- 【敏捷软件开发:原则、模式与实践】之敏捷设计的几个原则