重构中对设计模式的反思
2014-07-06 16:10
183 查看
什么是设计模式?
每一类编程语言都具有其自身的特性,就像是面向对象的语言,其特性就是封装,继承,多态,抽象. 同时,使用每一类编程语言开发软件时也都有一些设计准则,这些准则保证了软件的质量,即具有良好的设计.而设计模式则是广大软件开发人员总结出的开发经验技巧,它们利用编程语言的特点,实现这些准则.因此,可以想象,当我们对设计模式熟悉到一定程度后,在设计系统时,我们眼里就会变得没有设计模式,只有设计准则,真正达到手中无剑,心中有剑的境界。
在学习设计模式时,究竟要学什么?
以前,在开始这个阶段学习的时候,有童鞋问过我,这么多东西,究竟要学什么? 学习什么,还要看这个东西是用来做什么的,当然是主要学习这个模式主要解决了什么问题。
在设计模式的书中,我们会看到一个名为"意图"的部分。意图是什么?这里,这个意图回答了如下问题:
1,设计模式是做什么的?
2,它的基本原理和意图是什么?
3,它解决的是什么样的特定设计问题?
但是许多设计模式的意图部分都没有说明模式解决的主要问题,更多的描述的模式是做什么的,怎么用。
为什么要着重理解设计模式解决了什么问题呢? 因为模式之所以 存在,就是为了解决问题,所以要了解在某种情况下模式是否真的有所帮助,必须了解它们有助于解决什么问题。
其次学习的才是它是如何解决问题的。可是很多人上来估计都本末倒置了,上来就学它怎么解决问题的,忽略了最简单最重要的东西。
应用设计模式中容易出现哪些问题?
在学习设计模式后,作为初学者,容易出现两个问题:
1,过度设计:代码的灵活性和复杂性超出所需。
有些程序员之所以这样做,是因为他们相信自己知晓未来的需求。他们推断,今天就把设计方案设计的更灵活,以适应明天的需求。但是,如果预计错误,这可是个巨大的浪费。造成了“用大炮去打蚊子”的窘境。
敏捷开发原则告诉我们,不要为代码添加基于猜测的,实际不需要的功能,如果不清楚一个系统是否需要某个模式,一般就不要急于去实现它,事实上,在需要的时候通过重构去实现这个模式并不困难。(选自《大话设计模式》)
2,设计不足的问题:比起过度设计,这个要常见的多。
例如,在初次做机房收费系统时,我们重在实现功能,而忽略了系统整体的结构,如果真正做一个软件用这种方法,那么,在系统交付使用后,运维将变得异常困难,当软件变成大泥球后,我们只能去尝试重构,推倒重来了。
如何恰当使用设计模式?
用模式改善既有设计优于在设计早期使用模式,通过演进得到设计而不是采用大规模的预先设计,通过重构实现,趋向和去除模式,而不在设计早期使用模式。将模式的使用延迟,既避免了过度设计的问题,也对系统中设计不足进行了思考。通过逐步改进代码的设计问题,就能够逐渐嗅出代码的坏味道,发现了哪里有问题,设计的改进就成功了大部分。
——文章参考《大话设计模式》& 《重构与模式》
相关文章推荐
- 重构中对设计模式的反思
- 重构中对设计模式的反思
- 重构中对设计模式的反思
- 重构 - 理解设计模式的捷径(6 附录)
- 在重构的过程中,什么情况下应该使用设计模式?应该用哪种模式?
- 最近重构一个通讯系统 想了一个很有趣的设计模式,我就叫——移花接木
- 设计模式和重构的学习心得体验
- C# 设计模式与重构
- .Net中的设计模式——从实例谈OOP、工厂模式和重构 http://www.cnblogs.com/wayne-ivan/archive/2006/09/07/496920.html
- 重构 - 理解设计模式的捷径(5 设计模式的思想)
- 重构 - 理解设计模式的捷径(3 设计模式的引入 - 状态模式)
- 敏捷开发、重构与设计模式
- 从重构的角度学习bridge设计模式
- 从Java的角度理解设计模式1:什么是重构
- 重构,设计模式和设计
- 重构 - 理解设计模式的捷径(0 序言)
- .Net中的设计模式——从实例谈OOP、工厂模式和重构
- tdd,设计模式,重构在软件开发中的概念和角色辨析
- C# 设计模式与重构
- C# 设计模式与重构