技术开发 频道

解析Microsoft .NET Pet Shop

  2.Pet Shop 架构

  Pet Shop 3.0 的体系结构如下图所示:


图2:.NET Pet Shop 3.0 体系结构

  3.Pet Shop 解决方案中的应用领域

 

范围  用途 .NET 实现
用户接口组件 捕获来自用户的数据输入,显示后端系统返回的数据。 它们还处理简单的定位。 参见用户接口组件。 ASP.NET Web 窗体,用户控件和服务器控件。 这些构造能够清晰地分离设计者的 HTML 和 UI 代码比如按钮的事件处理程序。
用户接口处理 用后端业务对象控制用户定位和处理流程。 还要处理用户会话数据的管理。 参考用户处理组件。 这些是用 C# 类实现的。 会话状态管理由 ASP.NET 处理。
业务组件 实现应用程序业务逻辑的组件。 这些是用 C# 类实现的
业务实体 在应用程序各层之间传递数据的瘦数据类。 参见业务实体组件。 这些是用 C# 类实现的,每个字段都以属性的形式公开。 每个类都标记为“serializable”,启用进程间传输。
数据访问层组件 处理与后端数据存储区的交互,包括数据库、消息处理系统等。 这些组件处理与后端数据存储区的交互,包括数据库、消息处理系统等,是用四个 C# 项目实现的。

 

  4.Pet Shop 中的数据工厂模式

  通过上面的了解,我们已经基本熟悉了Pet Shop架构,下面我们就来重点看看在这个解决方案中,是如何采用工厂模式来实现数据库的可移植性的。

  在实际应用中,我们经常会遇到开发的软件产品需要同时支持不同的数据库平台,比如Oracle和SQL Server以及DB2。 而在设计应用程序的数据库访问机制时,我们可以选择应该使用哪一个数据库提供程序;可以使用通用的 OLE-DB 托管提供程序或者数据库特定的优化了性能的 .NET 托管提供程序,比如 .NET 框架中提供的 SQL Server 和 Oracle 托管提供程序。 应用程序的关键需求之一是创建一个高性能的解决方案,因此,我们选择用数据库本身的 .NET 托管提供程序构建应用程序。 关于托管提供程序和通用 OLE-DB 提供程序之间的性能差异分析,读者可以参考 Using .NET Framework Data Provider for Oracle to Improve .NET Application Performance,该文档说明了厂商特定的提供程序能够比等价的 OLE-DB 提供程序性能好两到三倍。 在选择数据库特定的访问类时进行的考虑是,我们需要为每个要支持的数据库平台写一个单独的数据访问层,因此应用程序将包含更多代码。 虽然两个数据访问层共享很多公共代码,但还是要明显地分别针对具体数据库(Oracle 或 SQL Server 2000)。

  为了简化数据库访问类的使用,我们选择 GoF (译注:指 Erich Gamma 等著《设计模式》一书)概述的工厂设计模式,通过反射动态在运行时加载正确的数据访问对象。 工厂设计模式是这样实现的: 创建一个 C# 接口,其中对于数据库访问类必须公开的每个方法都要声明一个方法。 对于每一个要支持的数据库,都创建一个实现数据库特定代码的具体类,以执行接口也称“协定”中的每一项操作。 为了支持运行时确定加载哪一个具体类,需要创建第三个类,也就是工厂类,它从配置文件中读入一个值以确定应该使用反射加载哪一个程序集。 通过 .NET 的反射命名空间,可以加载某个特定程序集并用该程序集创建某个对象的实例。 为了使应用程序更安全,为版本控制提供更好的支持,我们可以在应用程序配置文件(也就是这里的 web.config. )中添加要加载的程序集文件的“证据”,这意味着 .NET 框架将只加载我们在编译期间签过名而且有正确版本号的程序集。这一创建的解决方案最重要的优势是数据库访问类可以在业务逻辑类之后编译,只要数据访问类实现了 IDAL 接口。

0
相关文章