分享
 
 
 

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

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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

本文介绍一部分在Windows应用开发中常用的设计模式,值得一提的是在Windwos平台并不存在很多得到大家公认的模式,本文介绍的3种设计模式来源于Microsoft的网站和一些技术书籍。

本文主要介绍两种模式:Mike McClure (Microsoft)在MSDN上提出的Entity-Collection-Class(ECC)模式,以及Bryan Costanich从ECC模式衍生的Manager-Collection-Class(MCC)模式,其它的还有Wade Baron在《Designing Solutions With COM+ Technologies》中提到的CBOFramework请查阅文章末尾的参考资料。

Entity-Collection-Class模式Engine-Collection-Class 设计模式将一个实体组件分为Engine、Collection 和 Class 三个部分。Class为通常的业务/实体对象,具有属性,代表现实世界的实体。Engine 和 Collection 则提供用来管理和扩展其行为的方法。对于要被建模的实体,必须创建所有这三种元素。

图 1. ECC设计模式关系图

ECC 将实体的创建、存储和属性分离开,从而为业务对象提供了一种三层设计。ECC 设计模式使用面向对象的技术(如封装)和一些很流行的设计模式(如 Object Factory 和 Opaque Object Adapter)。

通常,Engine 实现一种称为 Object Factory 的设计模式,后者定义了一个用来创建其它对象的接口。在这种情况下,Engine 既创建Collection对象,也创建 Class 对象。以这种方式设计 Engine 提供了以下好处:

通过单个接口控制和强制对象的创建 提供检查和强制对象创建的安全性 提供客户机与 Collection 和 Class 对象之间的松散耦合,这可以增加新的功能而不影响客户机 用已知的有效状态强制对象的创建 Collection 实现一种称为 Opaque Object Adapter 的模式,后者允许一个对象私有地封装和使用另一个对象的接口和功能。正如图 2 所示的那样,Collection 包含对 ConcreteInternalStorage的一个引用。这称为合成。ConcreteInternalStorage 对象用于存储Class 对象,并且根据所提供功能的多少,它也可以用来为 Collection 提供扩展功能。数组、.Net Framework 的列表对象、字典对象和 ADO 记录集都是 ConcreteInternalStorage 对象的例子。这样实现Collection 提供下列好处:

实现的继承 通过更改 ConcreteInternalStorage对象增强功能 客户机和 Collection 的内部存储对象之间的松散耦合,允许对象变化对客户机产生最小的影响,或者根本没有影响 处理 Class 对象的能力(如计算总和、计数) Class 提供对实体数据的访问,它同时管理自身对象的状态,如Dirty,IsNew接口。图2是一个ECC模式的参考模型。

图 2. Engine-Collection-Class 模型

ECC模式实现比较复杂,完整的设计思想参看Engine-Collection-Class, a Design Pattern for Building Reusable Enterprise Components

Manager-Collection-Class模式MCC是从ECC衍生而来,同ECC不同,ECC的Collection类负责具体实体的创建,而Engine提供该外部访问,在MCC模式中Collection仅仅用作对象的容器,而Manager即提供外部访问,在多数情况下又负责实体的维护,因此MCC模式实际上常常被用作MC模式(Manager-Class)。

创建一个完整的MCC模型,需要创建3个类:ObjectManager,ObjectCollection,Object。完整的业务实体图如下图:

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

ObjectManager

ObjectManager管理数据的存储,包括获取、持久化、更新和删除对象或对象的集合。 ObjectManager管理数据存储,包括编写访问数据创建业务对象的代码,为了更大的重用,也可以考虑把处理的数据获取和持久化的功能抽象出来放在一个ObjectDataManager类中。

ObjectCollection

ObjectCollection继承至.NETd的框架类ArrayList(在C++也可以实现为Vector),它能够管理集合项,并且实现了IEnumerable(.NET框架类)接口,可以绑定到列表控件中。ObjectCollection类可以增加附加的方法,如根据对象的属性排序。ObjectCollection并不负责持久化性的管理,一般情况下ArrayList就能满足MCC对集合的要求,因此设计时可以更加简化。

Object

Object描述需要在对象上维护的数据的属性,例如User对象,这些对象并不与数据库连接。当对象的数据改变时,布尔标志IsDirty应当设定为true,Object自身并不知道怎样"保存"或"更新",它需要传回给ObjectManager类来实现这些功能。另外,ObjectCollection类的对象集合也能传递给ObjectManager来进行持久化的管理。

MCC模式的完整描述参看Engine-Collection-Class, a Design Pattern for Building Reusable Enterprise Components

参考资料书籍 《Designing Solutions With COM+ technologies》,Wade Baron,英文版

《COM+技术解决方案设计》,Wade Baron,机械工业出版社出版, 2001.09,中文版

文章 Engine-Collection-Class, a Design Pattern for Building Reusable Enterprise Components

MCC Design Pattern(draft)(Microsoft Word格式)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有