利用反模式提高编程的方法
设计模式对软件开发来说很重要,这一点从它在技术贸易新闻中所占的数量就可见一斑。不过,鉴于其在开发过程中的实用性,设计模式只解决了问题的一半。反模式 ― 描述“对产生绝对负面结果的问题的一种常用解决方案” ― 旨在通过向 Java 程序员展示如何避免常见的 Java 陷阱来解决问题的另一半。
使用设计模式重复成功策略
我在观察周界瀑布上的漂流时,想起了我所了解的事情。从和别人的谈话中,我了解到所有成功的漂流都是从第三个狭缝的右侧过去的,而且我必须快速地冲过急流,以避免碰上瀑布下浅水上面的石块。这些经验增强了我的信心,我不再理会旋涡的危险,冲进了急流的主干道。
虽然我在这些模式的术语中并没有考虑到这一点,我还是在使用设计模式。我将自己的策略建立在那些在我之前成功地通过急流的漂流者的经验之上。设计模式给予我信心,使我能够通过一个原本超越我技能水平之上的急流。我经常将这些相同的原理应用到编程和体系结构中;您可以通过观察一个策略反复的成功结果来学着解决给定的问题。有了设计模式,结果是肯定的。您可以利用自己的经验、观摩导师,或是从书上学习专家是如何做的。
我们的编程技巧中很多最重要的先进之处就是来自于设计模式。模型-视图-控制器(Model-View-Controller)模式指导我们有效地分割代码,在用户接口和模型之间定义一个良好的边界。发布-订阅(Publish-Subscribe)设计模式指导我们如何在不广播事件的情况下管理它们。其它的设计模式对各种 Java 框架产生了深远影响:用于远程通信的代理 EJB 接口、集合类、Swing 框架和很多其它框架。
我非常喜欢构建可重复过程。从这一点来讲,设计模式可以提供很多好处。设计模式强迫您考虑将问题分割成分立的子问题,其中有一些可以利用可重复解决方案来解决。设计模式还强迫您考虑如何正式地表示和传达设计经验,从而使其它人可以利用您的成果。
但是设计模式还不是足够的。如果您将编程问题想象成一个必须穿过的地区,那么设计模式最多只是一张局部地图。毕竟,如果已经存在一个完美的解决方案可以满足您的需求,您可能就会直接去买,而不是自己构建了。此外,随着支持的软件不断发展,基础结构 ― 地图上已有的道路 ― 也在迅速地改变。局部地图可以指引您避开某些危险,但不是所有危险。您将必须在地图之外的地区冒险,才能到达目的地。那么,如果迷失了方向,您会怎么做呢?
使用反模式避免落入痛苦的陷阱
我在急流中调整方向时,水流将我推向左边。橡皮艇漂流者必须洞悉高难度急流中的危险之处,我在这点上完成了要求。我知道在我之前有一些漂流者漂到左边并翻了船,而且我已经考虑过,并在脑海中练习了解决此问题的方法。经过此番准备,我奋力地划浆,将橡皮艇恢复到原来的方向。现在我有了一步一步战胜困难的机会。
下面是在反模式中考虑这个问题的方式:我从一个很难的问题开始。根据其它成功的解决方案,我选择一个计划:我的设计模式。我的计划出了问题,但我有所准备,通过在我的急流中分析其它失败的漂流作出响应:我在使用反模式。因为我有所准备,所以看出了问题,并调整我的方法以回到正途:我在重构。在高难度的橡皮艇漂流和编程中,从自己的错误中学习都是很有价值的,但也很痛苦。我更宁愿从别人的错误中学习。使用这种方法,我就能够试着解决通常远远超越我能力范围的问题了。
Antipatterns: Refactoring Software, Architectures, and Projects in Crisis一书的作者这样定义了反模式:
反模式是描述对产生绝对负面结果的问题的一种常用解决方案的字面形式。
这里的关键词是:
字面形式:反模式是问题的描述,而不是代码的描述。这非常重要,因为我们可以迅速和有效地传递消息,而客户可以迅速地理解。
常用:如果它不是模式,那它就不是反模式。您必须建立几个不同的运行较差的行为实例,最好是在不同的环境中,这样才能使错误上升到反模式的级别。
负面结果:设计必须有可以观察的、负面的效应。
最著名的反模式 Y2K 向我们展示了这个激动人心的新领域的危机和出路。回想起以前,成千上万的开发者将日期编码成两位数字而不是四位数字,错误地比较这些数字就会导致数以万计的错误。很多杰出的研究者都预言这个问题将会泛滥成灾,但是经过人们对问题的深入研究,新的标识和重构技术已经很有效地修正了代码,以至于很少有人会碰到预言中那么多的问题。反模式类似于设计模式,是重复使用的解决方案。区别在于反模式有负面结果。当您为反模式做文档时,您将希望获取至少下面这些元素:
名称:有时候反模式可能已经有一个或多个非正式的名称,这是由开发社区给出的。其它情况下,您就会希望自己选择一个名称。这个名称应该具有描述性,而且要简单。
问题:问题描述了反模式有缺陷的解决方案,以及驱使开发者走向有缺陷的解决方案的推动因素。这个描述指导其他人如何找到问题。
<相关新闻>>
- 发表评论
-
- 最新评论 更多>>