跳到主要内容

介绍

维基百科定义

设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类别或物件来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类别或物件。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。

反面模式

在软件工程中,反面模式(anti-pattern 或 antipattern)指的是在实践中经常出现但又低效或是有待优化的设计模式,是用来解决问题的带有共同性的不良方法。它们已经经过研究并分类,以防止日后重蹈覆辙,并能在研发尚未投产的系统时辨认出来。

  • 分析瘫痪(Analysis paralysis):花费太多精力在项目的分析阶段

  • 超前沿技术(Bleeding edge,刀锋):采用一些未经测试和/或尚不稳定的前沿技术来运营,从而导致成本超支、表现/性能不佳,和/或交付延期。

  • 死亡征途(Death march,死亡之旅):除了 CEO,每个人都知道这个项目会成为一场灾难,但是真相却被隐瞒下来,以免项目被立即取消。(尽管 CEO 通常知道并且仍然继续试图最大化利润。)然而,真相被隐藏起来,直到大限来临("Big Bang")。另一种定义:雇员由于不合理的 deadline,被迫在深夜和周末加班。

  • 旁观冷漠(Bystander apathy):一个需求或者设计是错的,注意到这一点的人却不指出,因为这影响的是其他人。

  • 偶然复杂度(Accidental complexity):向一个方案中引入不必要的复杂度

  • 拜物编程(Cargo cult programming):由于对模式的盲目崇拜,在不理解的情况下就使用模式和方法,企图得到好的结果

  • 隐藏错误(Error hiding):在显示给用户之前捕捉到错误信息,要么什么都不显示,要么显示无意义的信息

  • 黄金大锤(Golden hammer):认为自己最喜欢的解决方案是到处通用的(参见:银弹)

  • 重新发明方的轮子(Reinventing the square wheel):已经有一个很好的方案了,又再搞一个烂方案来替代它

引用参考

《JavaScript 设计模式与开发实践》

汪图南 - JavaScript 设计模式与开发实践

维基百科 - 设计模式

维基百科 - 反面模式