设计模式与工程实施
提供丰富的管理、配置、集成和定制开发的API,有MOM和WMI等完善的监控机制,有良好的结构化 异常处理能力,有友好的设计界面
可以提供不同DCOM对象和支持COM接口对象的开发,适于处理对遗留系统的集成封装
适于大型的Broker环境,与活动目录环境集成,具有良好的高可用能力,配置、管理、监控、消息追 踪、数据映射和集成流程编排都有不错的支持。不过相应的学习成本较高,对运维人员技术要求 也比较高。
Creates an instance of several families of classes Separates object construction from its representation Creates an instance of several derived classes A fully initialized instance to be copied or cloned A class of which only a single instance can exist
简介
• 真正为软件设计界带来系统化设计模式思维的是
Design Patterns: Elements of Reusable Object-Oriented Software
• 此后各个领域开始出现各种模式化思维
– 成例 – 数据及数据库 – 架构 – 实时系统 – 集成 – Web / AJAX – ……
A way of passing a request between a chain of objects Encapsulate a command request as an object A way to include language elements in a program Sequentially access the elements of a collection Defines simplified communication between classes Capture and restore an object's internal state A way of notifying change to a number of classes Alter an object's behavior when its state changes Encapsulates an algorithm inside a class Defer the exact steps of an algorithm to a subclass Defines a new operation to a class without change
– 模式是现成的,但实现套路您自己的
案例分析
案例分析
•Hale Waihona Puke 收集所有可能涉及的运行系统案例分析
• 多种方式“圈”定涉及的系统
案例分析
案例分析
案例分析
• 主要集成模式
– P2P
可用技术 ADO、 DTS/SSIS COM+ Web Service
P2P模式下的应用特点 通过ADO/完成对关系数据库、活动目录的访问和修改 直接从某系统的数据库层次向目标系统写入信息 在需要严格事务性保证的环境下,通过COM+完成包括复杂逻辑的集成工作 通过专用的WS定义,实现面向具体数据结构基于URI的访问
Adapter Bridge Composite Decorator Facade Flyweight Proxy
CoR Command Interpreter Iterator Mediator Memento Observer State Strategy Template Method Visitor
设计模式与工程实践
王翔(Vision Wang)
Architect (.NET, XML, PKI) 2009-01-17
个人资料
王翔 软件架构师,主要从事.NET、XML、公钥基础设施的开发。专注于数据(尤其是 XML信息) 的生产、加工、交换、提炼等过程。此外,参与了一系列有关应用密码技术和 PKI环境保护 信息系统数据安全的项目。 最喜欢数学,平常案头总是摆一本数学练习题。闲暇时间喜欢写作,通过发表多种技术文章 与国内外同行交流各种数据应用经验。 项目间隙经常到各海滨城市徒步旅行、野外露营、出海航行、极限运动。
• 然而,你不会一开始就做大系统,风险太高。所以,要练习, 最好从小系统开始使用模型与架构,如此才能检讨与学习,日 后方能在大系统中自如运用。
《设计模式——基于C#的工程化实现及扩展》序 胡百敬
简介
• 系统分析与设计是门艺术,问题的解法与何为问题是交织的, 而各模式的搭配使用技巧不同,存乎一心,需要巧思与反复琢 磨,方可有好的解法。本书立意明确,除了告诉你问题的类型 与解法,还提供了可以立即演绎的程序代码。相信这本案头的 工具书可以提供你一个不错的深思起点,造就有弹性、能扩充、 易维护的软件实力。
Match interfaces of different classes Separates an object’s interface from its implementation A tree structure of simple and composite objects Add responsibilities to objects dynamically A single class that represents an entire subsystem A fine-grained instance used for efficient sharing An object representing another object
案例分析
• 主要集成模式
– Dead Letter
可用技术 Queue + 自定义补发处理 BizTalk MessageBox
SSIS/DTS
Message Broker模式下的应用特点
Queue自己可以对发送失败的消息临时落地到本地其他队列,此时可以用自定义的补发进程处理。
BizTalk会把消息先持久化,如果交易过长或者存在错误,可以通过访问MessageBox获得发送失败的 信息,然后根据BizTalk的发送策略定义是否需要重发、重发何种特征的消息。
在交换过程中通过定义异常流程,将发送失败的消息保存在中间表,然后通过定制的SQL Job定期检 查重新发送。
案例分析
• 结合交换情景分析
案例分析
• 增加约束条件
– Broker采用SQL Server 2005的SSIS,他直接通过数据集成访问预定接收的数据库,并 且将信息写入Web门户的内容数据库和短信平台的消息库;
失。不必要的复杂性会从已经完成的工作量、开发团队了解发生事情 的能力、应用程序的实际性能和功能的正确性等方面影响开发成果 – 设计模式是专业知识的主要来源,尽管使用他们的效果很好,但是全 部使用他们就未必也是好的
简介
• 实际解决方案
– 设计模式的描述包含了使用模式的目标语境,必须考虑如何确保设计 模式匹配项目
GoF23与工程实践
• 工程中设计模式总是结合某些开发语言 • 而每种语言本身都有自己的特点
– C++、C#、Java、Delphi – VB、Visual Fox、COBOL – SQL、XQuery – JavaScript、VBScript、ActionScript、PowerShell – Python、Perl、Ruby、PHP – F# – XML、HTML、BPEL – ……
座右铭:天行健,君子以自强不息。
Agenda
• 简介 • GoF23与工程实践 • 案例分析 • 其他
简介
• 当你要开发一个小型的系统,整个系统只有两三人开发,系统 活不过5年,商业逻辑单纯,程序代码不超过万行,这时,你 随便做,影响不大。
• 反之,若要架构大型系统,你需要慎思,套用模型与架构,将 前人的经验当作基石,这样系统设计才不至于陷入发散。
案例分析
• 主要集成模式
– Message Broker
可用技术 • 企业定制的交互平台或BizTalk Server作为Route/Orchestration的机制,同时提供必要的公共服务Provider; • 调用接口采用支持Route功能的WCF; • 如果涉及比较复杂的数据流转,而且采用大型中间件产品过于复杂的话,可以扩展WF实现控制流转;
简介
• 反模式的思维
– 决定在项目中使用哪一种设计模式 – 一位开发人员通过介绍希望在一项工程中使用设计模式 – 开发人员通过包括设计模式的最佳实践来改进项目的渴望 – 开发人员天生的好奇心驱使他利用这个项目来研究设计模式 – 项目中应用了所有知名的设计模式 – 项目团队和交付的应用程序由于不自然地引入太多设计模式而遭受损
案例分析
• 主要集成模式
– Message Broker
可用技术 企业定制的交换平台
DTS/SSIS COM+ BizTalk Server
Message Broker模式下的应用特点
提供对包括ORACLE、SQL Server、MySQL、WMI、FILE、ADSI、MSMQ、MessageQ、MQ等各 种数据源的支持,并提供统一基于配置的处理能力,最好默认提供线程池化的并行处理能力,有 独立的监控手段和监控工具、提供丰富的定制处理流程API
GoF23与工程实践
• 设计模式是一种设计思想,表达这种思想最简洁的方式就是 UML + Demo就够了。
• 但Demo和实际工程应用还是有一段差距的,原因不多,但每 一个都需要在Demo之余好好考虑:
• 此外,设计模式的一个亮点就是提高代码的可重用性,如果设 计一套比较适合实际工程使用的设计模式库,可以节省八股式 反复Demo的工作。