1、设计模式与工程实践设计模式与工程实践王翔王翔(Vision Wang)Architect(.NET,XML,PKI)2009-01-17个人资料王王 翔翔软件架构师,主要从事.NET、XML、公钥基础设施的开发。专注于数据(尤其是 XML信息)的生产、加工、交换、提炼等过程。此外,参与了一系列有关应用密码技术和 PKI环境保护信息系统数据安全的项目。最喜欢数学,平常案头总是摆一本数学练习题。闲暇时间喜欢写作,通过发表多种技术文章与国内外同行交流各种数据应用经验。项目间隙经常到各海滨城市徒步旅行、野外露营、出海航行、极限运动。座右铭:天行健,君子以自强不息。Agenda 简介 GoF23与工程实
2、践 案例分析 其他简介 当你要开发一个小型的系统,整个系统只有两三人开发,系统活不过5年,商业逻辑单纯,程序代码不超过万行,这时,你随便做,影响不大。反之,若要架构大型系统,你需要慎思,套用模型与架构,将前人的经验当作基石,这样系统设计才不至于陷入发散。然而,你不会一开始就做大系统,风险太高。所以,要练习,最好从小系统开始使用模型与架构,如此才能检讨与学习,日后方能在大系统中自如运用。设计模式基于C#的工程化实现及扩展序 胡百敬简介 系统分析与设计是门艺术,问题的解法与何为问题是交织的,而各模式的搭配使用技巧不同,存乎一心,需要巧思与反复琢磨,方可有好的解法。本书立意明确,除了告诉你问题的类型
3、与解法,还提供了可以立即演绎的程序代码。相信这本案头的工具书可以提供你一个不错的深思起点,造就有弹性、能扩充、易维护的软件实力。设计模式基于C#的工程化实现及扩展序 胡百敬简介 设计模式可以当做软件开发中的独孤九剑。在软件设计中最大的敌人就是需求不断的变化变化,需求变化无休无止,软件交付日期也就无限期的延迟。我们无法做到以不变应万变,但如果能提前预见到一些变化,就能用很小的代价来应对剧烈的变化。GOF总结的经典设计模式虽只有23种,但不管是创建型模式、结构型模式还是行为型模式,归根结底都是在寻找软件中可能的变化,并封装这些变化。“料敌机先”为设计模式精髓之一,只不过这里的敌是需求的变化而已。对
4、于设计模式如果不能够做到灵活自如的运用,不仅威力大减,甚至于弄巧成拙,“活学活用”为设计模式精髓之二。设计模式基于C#的工程化实现及扩展序 李会军简介 设计模式无处不在 模式不是框架,不能套用 模式也不是过程,模式也不是简单的“问题的解决方案”系统的设计也不是含有设计模式就好 更不是含有越多的设计模式就越好简介 真正为软件设计界带来系统化设计模式思维的是Design Patterns:Elements of Reusable Object-Oriented Software 此后各个领域开始出现各种模式化思维 成例 数据及数据库 架构 实时系统 集成 Web/AJAX 简介 反模式的思维 决定
5、在项目中使用哪一种设计模式 一位开发人员通过介绍希望在一项工程中使用设计模式 开发人员通过包括设计模式的最佳实践来改进项目的渴望 开发人员天生的好奇心驱使他利用这个项目来研究设计模式 项目中应用了所有知名的设计模式 项目团队和交付的应用程序由于不自然地引入太多设计模式而遭受损失。不必要的复杂性会从已经完成的工作量、开发团队了解发生事情的能力、应用程序的实际性能和功能的正确性等方面影响开发成果 设计模式是专业知识的主要来源,尽管使用他们的效果很好,但是全部使用他们就未必也是好的简介 实际解决方案 设计模式的描述包含了使用模式的目标语境,必须考虑如何确保设计模式匹配项目 设计模式不是来源于当某人阅
6、读了一本设计模式的著作后,问:“我可以把这个设计模式使用在什么地方?”而是来源于某人寻找已发现问题的解决方案GoF23与工程实践CreationalAbstract FactoryBuilder Factory Method Prototype Singleton Creates an instance of several families of classesSeparates object construction from its representationCreates an instance of several derived classesA fully initialize
7、d instance to be copied or clonedA class of which only a single instance can existStructural AdapterBridgeCompositeDecoratorFacadeFlyweightProxyMatch interfaces of different classesSeparates an objects interface from its implementationA tree structure of simple and composite objectsAdd responsibilit
8、ies to objects dynamicallyA single class that represents an entire subsystemA fine-grained instance used for efficient sharingAn object representing another objectBehavioral CoRCommand Interpreter Iterator Mediator Memento Observer State Strategy Template MethodVisitor A way of passing a request bet
9、ween a chain of objectsEncapsulate a command request as an objectA way to include language elements in a programSequentially access the elements of a collectionDefines simplified communication between classesCapture and restore an objects internal stateA way of notifying change to a number of classe
10、sAlter an objects behavior when its state changesEncapsulates an algorithm inside a class Defer the exact steps of an algorithm to a subclassDefines a new operation to a class without changeGoF23与工程实践 设计模式是一种设计思想,表达这种思想最简洁的方式就是UML+Demo就够了。但Demo和实际工程应用还是有一段差距的,原因不多,但每一个都需要在Demo之余好好考虑:此外,设计模式的一个亮点就是提高
11、代码的可重用性,如果设计一套比较适合实际工程使用的设计模式库,可以节省八股式反复Demo的工作。GoF23与工程实践 工程中设计模式总是结合某些开发语言 而每种语言本身都有自己的特点 C+、C#、Java、Delphi VB、Visual Fox、COBOL SQL、XQuery JavaScript、VBScript、ActionScript、PowerShell Python、Perl、Ruby、PHP F#XML、HTML、BPEL GoF23与工程实践 领域建模阶段的模式化特征分析GoF23与工程实践 的章节安排GoF23与工程实践 工程中实践设计模式的感受 打破一些固有的套路 用自己
12、习惯的语言以简洁、直接的手段解决易于变化的问题 不要仅仅将依赖关系定格在对象体系,更多考虑到应用开发、运维不同生命周期中参与者的工作特点,将依赖拓宽到对象、配置体系、数据存储和服务体系 面向Web、面向混合信息体系、面向服务GoF23与工程实践 开发人员个性与设计模式的关系 程序开发人员在对待自己工作的时候总或多或少有些“至于至善”得心结 代码、类库、应用框架不仅仅是老板和项目经理眼中的产品,更是我们敝帚自珍的工作成果 但修改自己的代码,尤其是因为上游需求不确定带来这种压力的时候,总不是那么愉快地经历 我们要借鉴并应用那些成熟的套路,将变化抽象并集中在几个点,然后把他们交给运维人员来处理,而我
13、们更多把时间放在创造性工作 模式是现成的,但实现套路您自己的案例分析案例分析 收集所有可能涉及的运行系统案例分析 多种方式“圈”定涉及的系统案例分析案例分析案例分析主要集成模式 P2P可用技术P2P模式下的应用特点ADO、ADO.NET通过ADO/ADO.NET完成对关系数据库、活动目录的访问和修改DTS/SSIS直接从某系统的数据库层次向目标系统写入信息COM+在需要严格事务性保证的环境下,通过COM+完成包括复杂逻辑的集成工作Web Service通过专用的WS定义,实现面向具体数据结构基于URI的访问案例分析主要集成模式 Message Broker可用技术Message Broker模
14、式下的应用特点企业定制的交换平台提供对包括ORACLE、SQL Server、MySQL、WMI、FILE、ADSI、MSMQ、MessageQ、MQ等各种数据源的支持,并提供统一基于配置的处理能力,最好默认提供线程池化的并行处理能力,有独立的监控手段和监控工具、提供丰富的定制处理流程APIDTS/SSIS提供丰富的管理、配置、集成和定制开发的API,有MOM和WMI等完善的监控机制,有良好的结构化异常处理能力,有友好的设计界面COM+可以提供不同DCOM对象和支持COM接口对象的开发,适于处理对遗留系统的集成封装BizTalk Server适于大型的Broker环境,与活动目录环境集成,具有
15、良好的高可用能力,配置、管理、监控、消息追踪、数据映射和集成流程编排都有不错的支持。不过相应的学习成本较高,对运维人员技术要求也比较高。案例分析主要集成模式 Message Broker可用技术企业定制的交互平台或BizTalk Server作为Route/Orchestration的机制,同时提供必要的公共服务Provider;调用接口采用支持Route功能的WCF;如果涉及比较复杂的数据流转,而且采用大型中间件产品过于复杂的话,可以扩展WF实现控制流转;案例分析主要集成模式 Dead Letter可用技术Message Broker模式下的应用特点Queue+自定义补发处理Queue自己可
16、以对发送失败的消息临时落地到本地其他队列,此时可以用自定义的补发进程处理。BizTalk MessageBoxBizTalk会把消息先持久化,如果交易过长或者存在错误,可以通过访问MessageBox获得发送失败的信息,然后根据BizTalk的发送策略定义是否需要重发、重发何种特征的消息。SSIS/DTS在交换过程中通过定义异常流程,将发送失败的消息保存在中间表,然后通过定制的SQL Job定期检查重新发送。案例分析 结合交换情景分析案例分析 增加约束条件Broker采用SQL Server 2005的SSIS,他直接通过数据集成访问预定接收的数据库,并且将信息写入Web门户的内容数据库和短信
17、平台的消息库;“通知生成服务”退化为SSIS的存储过程和SQL Job;Proxy采用Broker服务器网络NAT的方式,在分支企业的外部网提供一个新的IP地址,保证办公网和外部网的应用都可以以“VLAN内部”的形式与Broker交互;短信服务与外部供应商采用MSMQ+计划任务的方式,计划任务其实要执行一个本地.vbs文件,每次执行都从失败队列的文件夹把文件Cut到发送队列的文件夹,如果检查某个文件创建时间与最近修改时间隔大于2小时,那么就认为是死信,交给后面的电话通知机制处理;其他 推荐的资料 Design Patterns:Elements of Reusable Object-Oriented Software Patterns of Enterprise Application Architecture Enterprise Integration Patterns Data Patternshttp:/ AJAX Patternshttp:/ajaxpatterns.org/Patterns Design Patterns for.NEThttp:/ Libraryhttp:/ Security Patternhttp:/www.securitypatterns.org/