Engine-Collection-Class,一种用来建立可重用企业组件的设计模式[13]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 xxcc 的 blog

erinfo.fields(fn_userinfousertypeid) <...> .securitytoken = securitytoken .isnew = false .classstorage = false .dirty = false end with col.add ocuserinfo rsuserinfo.movenext set ocuserinfo = nothing loop '将信息置入 collection 对象 if not ocoluserinfo.load(securitytoken, col) then err.raise err_userinfoloadfailed, _ "iobpuserinfoeng.getuserinfo proc", _ "load failed for private collection" goto cleanexit end if '成功 set getuserinfo = ocoluserinfo end if <...> end function

getuserinfo 方法是说明应该如何定义 get engine 方法的主要示例。下面是基本建议:

  • 检查安全性,要么确保调用者有调用此方法的权限,要么强制实施基于角色的安全性。

  • 将传递的参数或其它所需的字段打包。

  • 调用数据源(我们的实现使用一个“数据访问层”对象)来检索数据。

  • 将数据解包到多个 class 中。

  • 填充 collection 并将它返回给调用者。


实现注解

当业务组件与客户在同一进程空间中运行时,ecc 模型的效率最高。广泛使用对象特性是其主要原因。对某个特性的每个调用都需要从客户到此对象的一个往返。如果这些往返跨越进程边界,则开销变得相当可观。在基于 web 的解决方案中,这意味着这些对象与 web 站点在同一进程空间中运行或尽可能地接近。在这种情况下,最好将 web 站点配置为在单独的内存空间中运行。这提供了错误隔离功能,从而使 web 服务器能够在进程中止以后重新启动此进程。

本文的作者已经使用此方法在多个项目或客户身上取得了巨大成功。我们发现:ecc 设计模式最强有力的部分就是它所倡导的类似模板的方法。作为项目主持人,我们能够向开发人员讲授此模式,然后很快地复查不符合它的代码。因为它是经过此前对该实现的改进所证实的一个模式,所以它使我们可以用更多的时间来考察客户特定的要求。此外,大多数代码成为剪切和粘贴操作;一旦创建了第一个业务组件(模板),其它组件就可以用它作为一个起点。一般说来,对象的调试和设计在所有组件中变得更加通用,从而使开发人员更容易地交换任务。在项目的设计阶段会出现多次改动,范围从 ui 到数据库。我们能够在对系统产生最小影响的情况下实施许多更改。下面是所进行的更改的几个示例:

  • 数据传输格式   最初的设计将 ado 记录集用作数据传输格式。一个设计更改要求应用程序将数据传输换为 xml。如果使用以前的方法将记录集返回给 asp,则我们将必须修改应用程序中的每一段代码。ecc 为开发人员在数据传输和 asp 代码之间提供了一个隔离层。该层大大减少了影响,因为 active server pages 的数量比组件数量大十几倍。

  • 安全性   最初的设计使用实体级的安全性,具有传统的 crud 功能。安全性是在 engine 和 collection 级实现的。一个设计更改要求设计需要具有列级安全权限。因为 ecc 倡导使用映射到列的特性,所以我们很快就能实现这一要求。为此,我们必须在 class 级存储 securitytoken(通过 engine collection 方法),并在调用相应的特性方法时检查用户的权限。

  • 加密   最初的设计将 store/restore 方法用于组件的持久化。客户所关心的:byte() 在存储到数据库后是否是可读的格式。因为我们不使用内建的 ipersist 方法,所以能够将加密/解密添加到相应的方法中。

    注意:   如果 class 是公共可创建的,则在 visual basic 中只能使用 ipersist;而不能使用 collectionclass 方法。

  • 高速缓存   最初的设计受到很多性能问题的困扰,尤其是为显示一个页面而在数据库之间多次往返时。存在问题的页面具有多个下拉式列表,每个都对应一个单独的往返,而每次又都要带着多个用户进行往返。为了提高性能,我们在相应的组件中加入了高速缓存。我们还修改了 engine,使其在到数据库的往返之前首先检查高速缓存。

这些只是说明 ecc 设计模式的灵活性的少数几个例子。



结论

engine-collection-class 设计模式提供了一种与实现无关的应用程序框架。这一体系结构由以下几部分组成:engine,用来控制创建 class;collection,用来存储 class;class,用来表示现实世界的一个实体。这种对象化使对象的创建非常明确,并为业务规则验证、数据检索和数据处理提供了一致的接口。此外,它还提供了一种松散耦合的体系结构,在这种体系结构下,客户和组件都可以自由变化而不会彼此影响。

与纯粹基于服务的方法不同,ecc 首先为实体的数据建模,然后才为过程建模。这意味着单个组件可以重新用于业务逻辑的许多不同部分,而且业务规则将封装在一个组件中。


本文关键:Pattern VB
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top