q类设计模式的例子有Model-View-ControllerQMVCQ模式、Value Object J2EE模式和Data Access ObjectQDAOQJ2EE模式
Isolated use是指设计模式的用是隐藏l节的设计模式。这c设计模式的品质包括Q?/P>
q类设计模式的例子有Singleton GoF模式或者Intercepting Filter J2EE模式?BR> 设计模式划分ؓ(f)几类Z(jin)解设计模式的范围提供?jin)一U快速的Ҏ(gu)。了(jin)解范围评估设计模式的媄(jing)响更加轻松。可以用或者抛弃这U设计模式吗Q一旦采用这U设计模式就?x)?jing)响应用程序的设计吗?q种设计模式影响?jin)应用程序的多个部分和其他的应用E序?jin)吗Q预先了(jin)解这些媄(jing)响ؓ(f)采用设计模式提供?jin)指对{?BR>
设计模式应用AntiPatterns
随着设计模式逐渐普及(qing)Q出C(jin)另一U叫做AntiPatterns的模式类型。尽设计模式提供了(jin)关于可重复的最x(chng)法的专业知识Q但是AntiPatterns通常描述应当避免的重复行为。AntiPatterns 验证?jin)这L(fng)事实Q做错事情和办对事情的h一样多?BR> 本节探讨设计模式采用中的AntiPatterns。了(jin)解这些AntiPatterns可以帮助(zhn)避免设计模式采用中的缺陗如同设计模式一P在他们提供了(jin)一些远见或者他们是一些非常熟(zhn)的环境Ӟ在他们可以ؓ(f)(zhn)的l验d色彩和(zhn)不再感到孤独时Q此处的AntiPatterns是一个全新的概念。如果?zhn)想阅L多有关AntiPatterns的资料,请参见本文结֤的资源列表?BR>
AntiPattern清单
设计模式?是的Q我们全部拥?/B>
问题Q?/B>军_在项目中使用哪一U设计模式?BR> 应用Q?/B> 既有broad exposure又有isolated use设计模式?BR> 环境Q?/B>一位开发h员通过介绍希望在一工E中使用设计模式?BR> 动力Q?/B>AntiPattern的动力通常有两U来源。一U是开发h员通过包括设计模式的最?jng)_跉|改进目的(f)望。另一U是开发h员天生的好奇?j)驱使他利用q个目来研I设计模式?BR> 推荐的解x(chng)案:(x)目中应用了(jin)所有知名的设计模式。设计模式手册生成一份清单,而目标是可以核对所有的设计模式?BR> 产生的语境:(x)目团队和交付的应用E序׃不自然地引入太多设计模式而遭受损失。这导致设计和开发非常复杂。这U不必要的复杂性会(x)从已l完成的工作量、开发团队了(jin)解发生事情的能力、应用程序的实际性能和功能的正确性等斚w影响开发成果?BR> 设计基本原理Q?/B>设计模式是专业知识的主要来源。尽用他们的效果很好Q但是全部用他们就未必也是好的?BR>实际解决Ҏ(gu)Q设计模式的描述包含?jin)用模式的目标语境。必考虑如何保设计模式匚w目。第二,设计模式不是来源于当某h阅读?jin)一本设计模式的著作后,问:(x)“我可以把这个设计模式用在什么地方?”而是来源于某人寻扑ַ发现问题的解x(chng)案?BR>
Developer/Project AntiPattern的实?/B>
(也称为:(x)Design pattern xyz? YeahQ我们有10?
问题Q?/B>在项目中或者项目之间控制设计模式的实现?BR> 应用Q?/B>broad exposure和isolated use设计模式都从解决q种环境中受益。但是,broad exposure设计模式无疑控制?jin)实现?BR> 语境Q?/B>开发团队将设计模式l合到项目中。团队由许多l验丰富的开发h员组成,他们知道应该什么时候用设计模式。所以会(x)正确的设计模式。如果涉?qing)到多个目Q项目之间没有设计模式实现共享?BR> 动力Q?/B>最l期限日益(f)q,团队成员工作效率很高。重C用实C(x)影响团队效率。假设他们都是专Ӟ他们的实现都非常优秀。在多项目情况中Q跨团队通信和代码共享要么没有被考虑Q要么被作ؓ(f)q度表中的潜在媄(jing)响被排除?BR> 推荐的解x(chng)案:(x)团队可以Ҏ(gu)需要单独包含和实现设计模式?BR> 产生的语境:(x)即使用?jin)正的设计模式Q但是他们是以很多不同的方式实现的。在限制集成和重C用成果的实现之间存在不兼宏V很多不必要的时间和工作被花费在l护、调试和扩展各种实现上。最l,各种实现都将被统一?BR> 设计基本原理Q?/B>应当允许专家成员独立工作。只要所包含的设计模式够好Q就不需要共享实现?BR> 实际解决Ҏ(gu)Q?/B>开发团队应当协调设计模式的使用。共享设计模式的公共实现可在来降低成本Q但是更重要的是Q它使开发h员(sh)间互相兼宏V如果需要,q种׃n可以被限制到划归先前讨论的broad exposure设计模式内。重用实现在目间也极有价|其在未来将要集成的时候?BR>
设计模式采用中IDE的角?/B>
IDE在(h)l发展和提供更多的功能。最初的IDEl成?jin)一U编辑环境和一些调试工兗现在,他们通常包含设计环境、审计工兗配|管理系l集成等{。随着IDE不断扩展范围Q需要确认他们在设计模式实现中的角色。诚?dng)设计模式在开发语a中实玎ͼ而IDE可以用于~辑源代码。但是,IDE可以扮演其他的角色吗?
一些IDEh下拉菜单Q(zhn)能够选择应用E序中包括的设计模式。虽然这可以加快设计模式的用,但是它只?x)导致更快地~写出极差的代码。评估这个特性需要记住几个因素?BR> W一Q设计模式在抽象中描q问题,q要一些译码来辑ֈ正确的实现。但是,他们常常包含“示例实玎ͼsample implementationQ”,q且IDE正是这U示例类l构插入到应用程序中。这很可能不是所需要的实现Qƈ且把他们攑ֈ应用E序中将带来更多的困惑,以及(qing)需要更多的~辑和重构工作而不是思考最初的实现?BR> W二Q和IDE拖放设计模式Ҏ(gu)有关的另一个问题是前面讨论的两UAntiPatterns。加快设计模式的实现很可能会(x)产生大量的设计模式应用,以及(qing)同一设计模式的多U版本,而不是解决Q意问题的版本?BR> 设计模式面(f)的挑(xi)战(sh)仅仅是得Cơ快速实玎ͼ而是定使用?jin)正的实现Q以?qing)机构中已有的一个完的实现?BR>
BEA WebLogic Workshop 8.1和设计模?/B>
(zhn)可能是一位BEA的客P如果(zhn)正在阅L文,(zhn)可能想知道新的BEA WebLogic Workshop 8.1是如何媄(jing)响?zhn)的设计模式考虑的。首先,W(xu)ebLogic Workshop是IDEQ因此前面有关IDE的章节同样适用。对q些讨论感兴的Workshop的两个额外方面是控g和预实现的设计模式?
WebLogic Workshop Controls是打包功能的一U方法,可以L其包含C用Workshop IDE的应用程序中。打包包括IDE必需的可视元素、运行时行ؓ(f)、要求的配置{等。控件是如何影响设计模式应用的呢Q还记得设计模式在前面划分ؓ(f)isolated use和broad exposure吗?划分到isolated usecȝ设计模式可能被打包成 Workshop Controls。把设计模式作ؓ(f)控g打包可 Workshop IDE的其他用户共享实玎ͼ从而避免了(jin)每一个Developer/Project AntiPattern中的实现?BR> (zhn)可能想知道Z么broad exposure设计模式Z么不可以作ؓ(f)控g实现。原因是broad exposure设计模式D创徏?jin)许多其他类或者独立于其他应用E序。这U情况就不适合控g的即插即用方面。broad exposure设计模式的采用应当三思而后行,一旦采用就不能L取消。这些要求不W合WebLogic Workshop Control的目标?BR> WebLogic Workshopq具有很多预实现设计模式Q如Pageflow和用h口结构。在Workshop 中,(zhn)可以创建JSP和定义Pageflow来控制Web应用E序面之间的定位。在q种情况下,W(xu)ebLogic Workshop使用行的Apache Struts 表现层框架。Workshop的这个方面(使用 StrutsQ提供了(jin)一UModel-View-ControllerQMVCQ设计模式实玎ͼ意味着不用创徏自己的MVC实现。Workshop包含的其他功能很可能替代(zhn)自q设计模式实现。尽一些设计模式实现的开盒即用很好,但是应当验证不仅实现而且实现创徏的WebLogicM依从性也非常合适?BR>
成功采用设计模式的三个步?/B>
如何把设计模式的采用和日益(f)q的最后期限、紧~的预算和很多公司现有的有限团队资源相结合?以下是成功制订设计模式的三个步骤?BR>
强大的通信和培?/B>
许多机构拥有领先技术,可能正式通过?jin)设计师论坛的论证或者非正式的公认专家。这些领先厂商将推广设计模式采用中的开N信Qƈ培训开发具体设计模式的团队。通信应当跨开发团队和目以便预先防止采用竖井和多U惟一的实玎ͼ谨记每个Developer/Project AntiPattern的实玎ͼ(j)。培训可以采用正式的internal lunch-and-learns、正式的internal class或者派一些员工参加外部培训。这些培训方式将?j)进正确的设计模式应用程序。如果仅有极的观众能够参加培训Q最佳的候选h是那些感觉适合在回来后能够培训其同事的人?BR>
设计模式采用指导
设计模式可用于ə目受益Q但是他们也可能因ؓ(f)误用而对应用E序造成损害。应当鼓励采用他们,但是对其的采用应当受到审阅和验证。设计模式可以包含在设计和开发过E中。在M一U情况中Q设计模式的使用应当由审阅者确认和验证。在审阅q程中还可能?x)遇到这L(fng)情况Q额外的设计模式不适用于最初包括的地方。即使环境中没有q行正式的审阅,q一步骤也可以通过同事审阅或者团队讨论来完成。这一步骤中的审阅者要么是主要团队的成员,要么与他们徏立开N信?
指导采用对于broad exposurecd的设计模式非常关键。这些设计模式具有很多相关的风险Q因Z们将创徏依赖性。这些依赖性可能在一些对象类中,例如Q只工作在更加广泛的DAO设计模式实现范围中的数据讉K对象QDAOQ、或者跨应用E序边界Q如使用Value Object设计模式在应用程序和应用E序层之间传输数据)(j)。这些设计模式也可以由项目中的其他h或者不同项目的人实玎ͼ而且实现应当重新使用Q不同于创徏另一U独特的实现?BR>
重用实现,不只是设计模?/B>
只要在创q设计模式实现中有一定的满Q团队和公司可以在重用发生在代码层Ӟ而不是设计创意层时获得更多益处。企业L(fng)的最初设计模式是改进的实现。但是,真正的目标是重用实现。重用实现将DQa)其他可重用的c(取决于公共实玎ͼ(j)Qb)~短开发时间和降低成本Qc)~短l护旉和降低成本;d)在应用程序之间和内部L集成?BR> q种重用对broad exposure设计模式非常重要Q有时是基本的)(j)。这些设计模式创Z(jin)外部依赖性(集成从公共实现中受益)(j)或者生全部的自定义类库(如果有公共基可重用Q。isolated use设计模式也可以从重用中获益,但是如果他们是根据具体情况定制的Q他们就非常难以重用?BR> 有时(zhn)可能会(x)问自己:(x)“如果重用比较好Qؓ(f)什么设计模式和可以重用的实C可以一同应用呢Q”在我们讨论设计模式如何使更多读者获益的时候才?x)讨个问题。如果可能,如果已经预定义了(jin)实现Q那么达到广泛适用性这个目标就?x)非常困难。然而,一旦设计模式被应用到特D的问题域或者技术基设施中,那么可以重用在该环境中产生的实现?BR>
架构中的设计模式
q看h像是一件可怕的dQ需要掌握设计模式如何应用在实际情况中,如何构徏优质的实玎ͼ以及(qing)如何?j)进重用实现。完成该d的方法之一是在环境中引入应用E序架构。应用程序架构提供了(jin)应用E序需要的l构Q从而开发团队可以关注应用程序的域逻辑。这包含?jin)已实现的设计模式。除?jin)重用设计模式概忉|者单个实C外,可以在多个项目和应用E序之间重用架构。这U共享的公共实现保?jin)兼?gu),qؓ(f)开发和l护多种不同的实现提供了(jin)一U低成本替代Ҏ(gu)。兼Ҏ(gu)提供了(jin)重新使用需要的技术基。没有够的幅在这里深入讨论架构的其他重要品质Q如q行时监和理、可配置应用E序逻辑和适应性行为等。?zhn)可以从Carnegie Mellon Software Engineering Institute (www.sei.cmu.edu/ata/ata_init.html) 中学?fn)到更多有关架构的知识?BR>
l束?/B>
设计模式是一Uo(h)人惊异的资源Q应该用他以增加?zhn)的优ѝ虽然设计模式提供了(jin)可重用的概念Q但是面临的?xi)战是决定用哪一U设计模式和致力于可以重用的实现。通过?jin)解采用设计模式中?x)产生的风险,可以在l箋(hu)学习(fn)和实现更多设计模式时避免风险?BR> 按照本文概述的步骤会(x)产生一个流E,用于在团队和机构中推q成功的设计模式采用?BR>
参考资?/B>
关于作?BR>Walter Hurst是Wakesoft的奠Zh和首席技术官。他在尖端技术领域工作了(jin)十年。成立Wakesoft 之前QW(xu)alter是一名独立咨询师Q主要用Wakesoft技术的早期版本为客h供互联网解决Ҏ(gu)。在此之前,W(xu)alter是Xpedior的技术设计师Q负责领导internal efforts开发实现在多个客户目中的应用E序架构。在加入Xpedior之前QW(xu)alter是Andersen Consulting?Center战略技术方面的高咨询师。在AndersenQW(xu)alter为多家胦(ch)?00客户领导Enterprise目。Walter在密歇根州大学获得计机工程学士学位?/P>