Windows应用开发中常用的设计模式

Windows应用开发中常用的设计模式
本文介绍一部 分在Windows应用开发中常用的设计模式,值得一提的是在W indwos平台并不存在很多得到大家公认的模式,本文介绍的3 种设计模式来源于Microsoft的网站和一些技术书籍。 本文主要介绍两种模式:Mike McClure (Mic rosoft)在MSDN上提出的Entity-Collect ion-Class(ECC)模式,以及Bryan Costa nich从ECC模式衍生的Manager-Collectio n-Class(MCC)模式,其它的还有Wade Baron 在《Designing Solutions With COM + Technologies》中提到的CBOFramewor k请查阅文章末尾的参考资料。Entity-Collectio n-Class模式
Engine-Collection -Class 设计模式将一个实体组件分为Engine、Col lection 和 Class 三个部分。Class为通常的 业务/实体对象,具有属性,代表现实世界的实体。Engine 和 Collection 则提供用来管理和扩展其行为的方法。 对于要被建模的实体,必须创建所有这三种元素。

图 1. ECC设计模式关系图
ECC 将实体的创建、 存储和属性分离开,从而为业务对象提供了一种三层设计。ECC 设计模式使用面向对象的技术(如封装)和一些很流行的设计模式( 如 Object Factory 和 Opaque Obje ct Adapter)。
通常,Engine 实现一种 称为 Object Factory 的设计模式,后者定义了一 个用来创建其它对象的接口。在这种情况下,Engine 既创建 Collection对象,也创建 Class 对象。以这种方 式设计 Engine 提供了以下好处:通过单个接口控制和强制 对象的创建 提供检查和强制对象创建的安全性 提供客户机与 C ollection 和 Class 对象之间的松散耦合,这可 以增加新的功能而不影响客户机 用已知的有效状态强制对象的创建
Collection 实现一种称为 Opaque Object Adapter 的模式,后者允许一个对象私有地 封装和使用另一个对象的接口和功能。正如图 2 所示的那样,C ollection 包含对 ConcreteInternal Storage的一个引用。这称为合成。ConcreteInt ernalStorage 对象用于存储Class 对象,并且 根据所提供功能的多少,它也可以用来为 Collection 提供扩展功能。数组、.Net Framework 的列表对象 、字典对象和 ADO 记录集都是 ConcreteInter nalStorage 对象的例子。这样实现Collectio n 提供下列好处:实现的继承 通过更改 ConcreteIn ternalStorage对象增强功能 客户机和 Colle ction 的内部存储对象之间的松散耦合,允许对象变化对客户 机产生最小的影响,或者根本没有影响 处理 Class 对象的 能力(如计算总和、计数)
Class 提供对实体数据 的访问,它同时管理自身对象的状态,如Dirty,IsNew接 口。图2是一个ECC模式的参考模型。
图 2. Eng ine-Collection-Class 模型
ECC 模式实现比较复杂,完整的设计思想参看Engine-Colle ction-Class, a Design Pattern for Building Reusable Enterpri se Components。Manager-Collecti on-Class模式
MCC是从ECC衍生而来,同EC C不同,ECC的Collection类负责具体实体的创建,而 Engine提供该外部访问,在MCC模式中Collectio n仅仅用作对象的容器,而Manager即提供外部访问,在多数 情况下又负责实体的维护,因此MCC模式实际上常常被用作MC模 式(Manager-Class)。
创建一个完整的MC C模型,需要创建3个类:ObjectManager,Obje ctCollection,Object。完整的业务实体图如下 图:

下面的MCC模型图帮助理解3个类之间的关 系

ObjectManager
Obje ctManager管理数据的存储,包括获取、持久化、更新和删 除对象或对象的集合。 ObjectManager管理数据存储 ,包括编写访问数据创建业务对象的代码,为了更大的重用,也可以 考虑把处理的数据获取和持久化的功能抽象出来放在一个Objec tDataManager类中。
ObjectColle ction
ObjectCollection继承至.N ETd的框架类ArrayList(在C++也可以实现为Vec tor),它能够管理集合项,并且实现了IEnumerable (.NET框架类)接口,可以绑定到列表控件中。ObjectC ollection类可以增加附加的方法,如根据对象的属性排序 。ObjectCollection并不负责持久化性的管理,一 般情况下ArrayList就能满足MCC对集合的要求,因此设 计时可以更加简化。
Object
Object描 述需要在对象上维护的数据的属性,例如User对象,这些对象并 不与数据库连接。当对象的数据改变时,布尔标志IsDirty应 当设定为true,Object自身并不知道怎样"
保 存"
或"
更新"
,它需要传回给O bjectManager类来实现这些功能。另外,Object Collection类的对象集合也能传递给ObjectMan ager来进行持久化的管理。
MCC模式的完整描述参看 Engine-Collection-Class, a Des ign Pattern for Building Reusa ble Enterprise Components参考资料书 籍
《Designing Solutions Wit h COM+ technologies》,Wade Baro n,英文版 《COM+技术解决方案设计》,Wade Baro n,机械工业出版社出版, 2001.09,中文版文章
Engine-Collection-Class, a De sign Pattern for Building Reus able Enterprise ComponentsMCC Design Pattern(draft)(Microsof t Word格式)

转载于:https://www.cnblogs.com/sharmy/archive/2007/10/23/935342.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值