当设计模式变成魔鬼

日期: 2010-10-20 作者:Cameron McKenzie & Paul Wheaton翻译:张培颖 来源:TechTarget中国 英文

你是否曾就一个项目让你的团队成员刚刚经历了一周紧张的设计模式培训?这太痛苦了,项目最终变成某种类型的竞争虐待狂,每一行代码都必须落实四人帮(译者注:Gang of Four指Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四人,他们所著的《设计模式》一书提出了23种基本设计模式)书中所描述的模式。“嘿,这个需要重新设计一个轻量级的”或者“嘿,这需要作为一个桥接重做。”下一件事情你肯定知道,一个简单的应用被一些多余的代码搞复杂了,这些多余的代码仅仅是为了证明提交人能够落实“责任链”或者“复合桥梁”。   每当我看到一个团队对于四人帮书中的……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

你是否曾就一个项目让你的团队成员刚刚经历了一周紧张的设计模式培训?这太痛苦了,项目最终变成某种类型的竞争虐待狂,每一行代码都必须落实四人帮(译者注:Gang of Four指Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四人,他们所著的《设计模式》一书提出了23种基本设计模式)书中所描述的模式。“嘿,这个需要重新设计一个轻量级的”或者“嘿,这需要作为一个桥接重做。”下一件事情你肯定知道,一个简单的应用被一些多余的代码搞复杂了,这些多余的代码仅仅是为了证明提交人能够落实“责任链”或者“复合桥梁”。

  每当我看到一个团队对于四人帮书中的内容雄心勃勃的时候,我都会发一封电子邮件或者更新项目Wiki,并为这个团队提供一篇Paul Wheaton名为《邪恶的设计模式》(《Evil Design Patterns》)的文章。这篇文章很简短,但提供了一些中肯的意见。

  “模式成为普遍问题的解决方案为公众所认识,”文中这样写到,“但是现在我们正在经历的应用程序比原本需要的复杂十倍以上,因为人们试图死记硬背他们所阅读过的模式。”

  不久前,我有幸同Paul就这篇四年前的文章进行了探讨,尽管这篇文章是很久之前写的,Paul仍旧认为里面的内容是中肯的。“我写这篇文章是一种抗议,我之所以写这篇文章是因为我真的认为模式正在走向一个混乱的空间。模式很重要,但是让事情变简单也很重要。”这篇文章反复提到“应用程序中使用的任何模式应该/必须由简单的事情来完成。”

  我提到的Paul的文章已经在《深入浅出设计模式》(《Head First Design Patterns》)书后重印,这也表明他的观点反映了一个共享模式狂热支持者的情绪。

  “当他们(Eric T Freeman、Elisabeth Robson、Bert Bates、Kathy Sierra)开始写《深入浅出设计模式》,这是我们对于JavaRanch的孵化,我把这个寄给他们说‘这个必须放在书的最前面。’当书最终出版的时候却在最后。”

  在面对他反对设计模式的事实面前,Paul看起来有些沮丧。

  那么,我们现在使用的设计模式得到的最大价值是什么?“我现在认为模式的主要目的是扩大我们的词汇。我可以说‘单例模式',我们都知道这是什么意思。我可以说'前端控制器',我们也都知道这意味着什么。”

  无论如何,这并不是完全贬低“设计模式”。最流行的框架和规范,无论是Spring、Hibernate或者GWT,充满了他们。问题是我们需要一种平衡,如果你的团队的设计模式狂热者开始得到一点点的控制,不要害怕给他们的这篇文章的链接。

翻译

张培颖
张培颖

云计算网站编辑

相关推荐

  • AWS云的设计模式与实践

    设计模式这一概念源自于建筑架构师Christopher Alexander,其目的是通过为特定专业领域的设计问题的解决方案形成文档,以形成某一类问题的通用解决方案。

  • Spring针对Java 8升级

    Java 8刚刚在几周前发布。后来Spring Framework项目负责人发表了题为《企业项目中的Java 8》的文章。文中,指出那些著名的Java EE应用服务器如何不允许轻松升级。

  • 软件项目成功:项目的处理

    在软件项目成功的因素中有我们谈及了问题域和社区,然这两者并不是软件项目本身。你可以把分类当作问题领域连续讨论几个星期,但分类的问题跟实际执行分类的库并不一样。

  • 软件项目成功的问题域、社区及细节

    在本系列的第一部分中,我们提到了项目成功相关的一些术语,并大致罗列了一组跟项目成功相关的东西……尽管从某种程度来说“提到”意味着“彻底无视”。