mike mcclure
microsoft corporation
leo romano
sierra system group inc.
2000年8月
摘要:详细说明用来设计可重用企业组件的一种方法。本文重点讨论 engine-collection-class (ecc) 设计模式,它是一种为分布式/分层应用程序创建可重用企业组件的灵活模型,这类应用程序既可与传统的“胖”客户机一起工作,也可与脚本客户机一起工作。
下载 desipat.exe 样例文件 (1.46 mb)。
目录
本文详细说明用来设计可重用企业组件的一种方法。重点讨论一种已被证实的设计模式,该设计模式已由多个项目和客户实现,并进行了改进。
engine-collection-class (ecc) 设计模式是一种为分布式/分层应用程序创建可重用企业组件的灵活模型,这类应用程序既可与传统的“胖”客户机一起工作,也可与日益流行的脚本客户机一起工作。由于它有简化的接口和直观的编码样式,ecc 设计模式缩短了开发时间,并使多个开发人员可以实现一致的编程。各公司和开发人员在实现将来的增强时可利用它的可扩展性,并在支持某个应用程序时利用它的可维护性。
因为此设计模式的核心以 com 和其它流行的设计模式为基础,所以 ecc 既可使用面向对象的语言实现,也可使用面向组件的语言实现。本文重点讨论 ecc 设计模式的 microsoft® visual basic® 实现。
本文主要作为 engine-collection-class 的一个初级读物,并未详细讨论 ecc 设计模式的某些更高级的特性。
为有效使用 ecc 设计模式,建议首先满足以下必备条件:
- 对 n 层体系结构和设计有基本的了解,包括 microsoft windows® dna 和每一层的功能。
- 对 com 的概念和 visual basic 如何实现它有基本的了解。
- 对面向对象的概念有基本的了解。
- 对组件设计有基本的了解,包括对象的用途、松散耦合的概念以及接口与实现的分离。
- 对数据库设计有基本的了解 — 知道实体关系图 (erd) 以及如何在数据库设计中使用它们。
- 同意以下观点:若非作出决策的各种因素导致实现设计不灵活,许多系统设计都会是非常灵活的。ecc 设计模式考虑了这种情况,并使用了一种灵活的实现方式,以便可以降低这些决策的成本。
注意: 有关进一步阐述这些必备条件的著作和文章的列表,请参阅参考资料部分。
您是否完成过这样的项目:您认为它是可重用的和可扩展的,但后来却发现为了利用最新的技术变革,您的系统必须重写。您是否遇到过这种情况:您启动了一个项目,而完成到一半的时候却意识到将 xml 或最新的 soap 协议用于互操作性会极大地改进将来的系统,不料发现这将破坏已写好的每个组件,并使成本直冲云霄。如果您回答“是”,则您不是唯一遇到这种情况的人。
在现在的市场竞争条件下,各公司需要以最少的信息作出快速的、长期的决策。错误的决策可能影响公司的每个部分,并使之倒退几个月甚至几年。企业行政管理人员和技术开发人员都想知道是否有一种方法可以降低开发风险。本文介绍一种用来构建可重用企业组件的设计模式。ecc 是一种简单且直观的设计模式,它的开发始终考虑着一样东西:变化。业务变化、规则变化、技术变化和人员变化。
但是,正是因为事情的变化并不意味着您必须忍受这种变化带来的全部影响。从企业的角度来看,ecc 设计模式有助于减轻以下因素的影响:
- 未达到的要求 — 所传达的意思和所理解的意思之间的差异。
- 人员不足 — 可能存在人员不足的情况,但在一个问题上投入更多的人力同样可能减少收益。
- 更高的学习要求 — 为了维护和扩展现有的系统,只懂一种编程语言是不够的。
- 更紧迫的时间 — internet 世界的事情发生得很快,机遇之门很快就会关闭。
- 额外的成本 — 项目超支和因项目范围的变化而引起的计划修订都会造成不利的影响。
从技术角度来看, ecc 是一种用来开发 n 层业务组件的三层设计模式,它允许以对解决方案影响最小的方式更改组件的创建、存储和属性。ecc 通过使用以下技术减少了变化对技术的影响:
- 组件的标准且一致的接口,它们提高了易用性。
- 开发人员所熟悉的启发式的通用面向对象编程 (oop)/面向对象设计 (ood),如设计模式和封装。
- 使组件既能在传统的“胖”客户机上使用,也能在脚本客户机上使用的简化接口。
- 直观的组件创建方式,使开发更快更容易。
使用可扩展体系结构的前端规划对于下一代应用程序和业务是至关重要的。在当前的项目中使用 ecc 设计模式,就可以开发出推动将来业务发展的更强健、更灵活的系统。
在开发可重用的设计模式解决方案时考虑了以下的核心元素:
- n 层分布式设计(分层隔离)
- 最小化网络调用(往返)
- 灵活的体系结构(适应性)
- 可维护性和可扩展性与纯性能
- 简单一致的接口
- 封装并集中管理外部依存性(组件的独立性)