技术开发 频道

设计模式的实际应用

    设计模式应用AntiPatterns

    随着设计模式逐渐普及,出现了另一种叫做AntiPatterns的模式类型。尽管设计模式提供了关于可重复的非常好的方法的专业知识,但是AntiPatterns通常描述应当避免的重复行为。AntiPatterns 验证了这样的事实:做错事情和办对事情的人一样多。

    本节将探讨设计模式采用中的AntiPatterns。了解这些AntiPatterns可以帮助您避免设计模式采用中的缺陷。如同设计模式一样,在他们提供了一些远见或者他们是一些非常熟悉的环境时,在他们可以为您的经验添加色彩和使您不再感到孤独时,此处的AntiPatterns是一个全新的概念。如果您想阅读更多有关AntiPatterns的资料,请参见本文结尾处的资源列表。

    AntiPattern清单

    设计模式?是的,我们全部拥有

    问题:决定在项目中使用哪一种设计模式。
    应用: 既有broad exposure又有isolated use设计模式。
    环境:一位开发人员通过介绍希望在一项工程中使用设计模式。
    动力:AntiPattern的动力通常有两种来源。一种是开发人员通过包括设计模式的非常好的实践来改进项目的渴望。另一种是开发人员天生的好奇心驱使他利用这个项目来研究设计模式。
    推荐的解决方案:项目中应用了所有知名的设计模式。设计模式手册生成一份清单,而目标是可以核对所有的设计模式。
    产生的语境:项目团队和交付的应用程序由于不自然地引入太多设计模式而遭受损失。这就导致设计和开发非常复杂。这种不必要的复杂性会从已经完成的工作量、开发团队了解发生事情的能力、应用程序的实际性能和功能的正确性等方面影响开发成果。
    设计基本原理:设计模式是专业知识的主要来源。尽管使用他们的效果很好,但是全部使用他们就未必也是好的。
实际解决方案:设计模式的描述包含了使用模式的目标语境。必须考虑如何确保设计模式匹配项目。第二,设计模式不是来源于当某人阅读了一本设计模式的著作后,问:“我可以把这个设计模式使用在什么地方?”而是来源于某人寻找已发现问题的解决方案。

    Developer/Project AntiPattern的实现(也称为:Design pattern xyz? Yeah,我们有10个)

    问题:在项目中或者项目之间控制设计模式的实现。
    应用:broad exposure和isolated use设计模式都从解决这种环境中受益。但是,broad exposure设计模式无疑控制了实现。
    语境:开发团队将设计模式结合到项目中。团队由许多经验丰富的开发人员组成,他们知道应该什么时候使用设计模式。所以会正确的设计模式。如果涉及到多个项目,项目之间没有设计模式实现共享。
    动力:最终期限日益临近,团队成员工作效率很高。重新使用实现会影响团队效率。假设他们都是专家,他们的实现都非常优秀。在多项目情况中,跨团队通信和代码共享要么没有被考虑,要么被作为进度表中的潜在影响被排除。
    推荐的解决方案:团队可以根据需要单独包含和实现设计模式。
    产生的语境:即使使用了正确的设计模式,但是他们是以很多不同的方式实现的。在限制集成和重新使用成果的实现之间存在不兼容。很多不必要的时间和工作被花费在维护、调试和扩展各种实现上。最终,各种实现都将被统一。
    设计基本原理:应当允许专家成员独立工作。只要所包含的设计模式足够好,就不需要共享实现。
    实际解决方案:开发团队应当协调设计模式的使用。共享设计模式的公共实现可在将来降低成本,但是更重要的是,它使开发人员之间互相兼容。如果需要,这种共享可以被限制到划归先前讨论的broad exposure设计模式内。重用实现在项目间也极有价值,尤其在未来将要集成的时候。

    设计模式采用中IDE的角色

    IDE在继续发展和提供更多的功能。最初的IDE组成了一种编辑环境和一些调试工具。现在,他们通常包含设计环境、审计工具、配置管理系统集成等等。随着IDE不断扩展范围,需要确认他们在设计模式实现中的角色。诚然,设计模式在开发语言中实现,而IDE可以用于编辑源代码。但是,IDE可以扮演其他的角色吗?

    一些IDE具有下拉菜单,使您能够选择应用程序中包括的设计模式。虽然这可以加快设计模式的使用,但是它只会导致更快地编写出极差的代码。评估这个特性需要记住几个因素。

    第一,设计模式在抽象中描述问题,并需要一些译码来达到正确的实现。但是,他们常常包含“示例实现(sample implementation)”,并且IDE正是将这种示例类结构插入到应用程序中。这很可能不是所需要的实现,并且把他们放到应用程序中将带来更多的困惑,以及需要更多的编辑和重构工作而不是思考最初的实现。
    第二,和IDE拖放设计模式方法有关的另一个问题是前面讨论的两种AntiPatterns。加快设计模式的实现很可能会产生大量的设计模式应用,以及同一设计模式的多种版本,而不是解决任意问题的版本。

    设计模式面临的挑战不仅仅是得到一次快速实现,而是确定使用了正确的实现,以及机构中已有的一个完美的实现。

0
相关文章