Anti Pattern

什么是 AntiPatterns

为了提高软件项目成功的比率,专家学者提出许多先进的软件开发技术,例如 Iterative development process、对象导向技术、设计模式 (design patterns)、软件组件、平台与框架 (Platform & Framework),这些正向且具有建设性的技术协助我们正确地建构信息系统。本文要介绍的内容属于逆向思考的技术,称为AntiPatterns,它们是从许多失败的软件项目中归纳出来的错误模式,所以软件中包含越多 AntiPatterns,失败机率越高。AntiPatterns 广泛出现在旧的系统上,但仍有许多软件人员在开发新系统时重蹈覆辙,而且目前有一半以上的 MIS 信息人员需要维护或延展老旧的系统,所以熟悉 AntiPatterns 不但有助于改善旧系统的维护工作,而且可以降低开发新系统的失败风险。

AntiPattern 的描述与分类

描述 AntiPattern 有简明及完整二种形式,简明形式 (Mini-Form) 包含名称 (name)、问题描述 (Problem)、解决问题的方案 (Refactored Solution),有时候使用一幅漫画或一则趣闻来突显问题的本质。完整形式 (Full-Template) 则包含名称与别名,问题的描述,藉以辨识问题的症状,不良的后果,问题的根本原因,及解决问题的方案。AntiPatterns 按照软件开发的大略分工规则分为三大种类:Development (程序设计)、Architecture (架构) 与 Management (管理),分别介绍如下。

程序设计的 AntiPatterns

Development AntiPatterns 主要是描述不良程序设计,例如初学对象导向技术的程序设计师常犯 The Blob AntiPattern,The Blob 的别名是 God Class,其症状是程序中包含一个非常复杂的类别 (class) 负责执行全部的功能,而其它的类别则只有数据或含有少量的功能,导致这种 AntiPattern 的根本原因是程序设计师仍使用 Procedural 方式设计程序,解决这问题的方法是将应用程序的功能均衡分配到适当的类别。其它常见的 AntiPatterns 例如 Spaghetti code:表示一团混乱的程序代码,通常连原来撰写的人都搞不清楚其中的逻辑,更不用说接手维护的人。Lava Flow (火山岩浆流):表示程序的功能改变或持续演化后,留下许多已经不再使用或无人关心的程序代码,但又没有人搞清楚删除这些 code 会不会有意外影响。Input Kludge:程序中包含七拼八凑的输入验证功能,通常是因为输入字段允许使用 Free format,导致难以处理输入的资料。

架构的 AntiPatterns

Architecture AntiPattern 常见的例子是 Architecture by Implication (没有明确的架构),所以每个人根据自己认为的架构 Coding,这种状况的根本原因是没有人负责架构设计,其解决方法是有人负责把系统切割为数个主要的软件组件,定义每个组件的接口及组件间的沟通标准。其它常见的 AntiPatterns 例如 Jumble (杂乱):软件组件互相呼叫,其间的关系纠缠混乱,解决的方法之一是遵循多层式架构的设计规范。Vendor Lock-in:应用程序直接呼叫外购软件组件的功能,使得应用程序高度倚赖此外购软件,其解决方式是跟据需求设计一层接口与外购软件沟通,应用程序即可得到较高的独立性。

管理的 AntiPatterns

Management AntiPattern 的典型是 Project MisManagement (不良的项目管理):根本原因通常是对项目的不关心,因而忽略了适度地规划、控制与检查等等项目成功的必要因素。其它的 AntiPatterns 例如 Analysis Paralysis (分析瘫痪):系统分析师为求完美或过度仔细而延误规格确立,挤压后续工作的时程,其解决方案是采用递增式开发流程 (Incremental & Iterative development process)。Viewgraph Engineering:开发人员被制作图表及文件的工作延误时程,原因通常是开发人员使用不当的工具,解决的方法则是设法取得适当的工具。

谨慎应用 AntiPatterns

应用 AntiPatterns 时必须注意一些状况以避免反效果,首先要注意的是指出组织或程序的 AntiPatterns 可能偒及他人,并引起互相指责的情事,所以要把AntiPattern 融入软件开发流程,使之顺利成为改善品质的工作技巧。其次是遵循『如果没坏就不要修理』原则,不要为了追求技术完美而冒然动手。如果需要进行改善,则应妥善规划,并避免同一时间处理多个 AntiPatterns。

结论

Design Patterns 与 AntiPatterns 是相辅相成的技术,Design Patterns 是解决问题的正确模式,而 AntiPatterns 则是导致失败的错误方法,所以我们使用Design Patterns 开发软件,使用 AntiPatterns 提醒我们避开陷阱。但是环境或技术的变迁,现在的 Design Patterns 可能变成未来的 AntiPatterns,例如当年的结构化系统分析与设计技术便是最明显例子。所以软件开发人员在运用 Patterns 时,务必考虑适用的条件、范围、及付出的成本,方能实现希望得到的效益。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值