在解决方案资源管理器中共包括22个项目,其中一个Web站点项目,21个类库项目。表18-1所示对这些项目进行了简要介绍。
<!--[if !vml]--><!--[endif]-->
图18-13 解决方案资源管理器
表18-1 解决方案PetShop中的项目说明列表
项 目 名 称 |
说 明 |
C:\..\Web\ |
一个Web站点项目,其中包括ASP.NET文件、用户控件、图片、配置文件、主题文件等 |
ICacheDependency、CacheDependencyFactory和TableCacheDependency |
这3个项目使用简单工厂模式实现SQL数据缓存依赖功能的应用。ICacheDependency项目中包括接口IPetShopCacheDependency,实现简单工厂模式中的抽象接口。CacheDependencyFactory项目用于实现简单工厂模式中的工厂类。TableCacheDependency项目用于实现工厂模式中的具体产品类,其实现了IPetShopCacheDependency接口成员 |
IDAL、DALFactory、SQLServerDAL和OracleDAL |
这些项目使用简化的抽象工厂模式和依赖注入技术实现了数据访问功能。IDAL项目中定义了多个接口,例如,ICategory、IItem等。同时,每个接口定义了由应用需求而创建的成员方法。DALFactory项目用于实现工厂类。SQLServerDAL项目用于实现当应用程序使用SQL Server数据库作为数据存储时,抽象工厂模式中的多个具体产品类,这些类均实现了IDAL中对应接口的成员方法。OracleDAL的实现与SQLServerDAL类似,其仅当使用Oracle数据库作为数据存储时才调用 |
DBUtility |
该项目中包括用于实现SQL Server和Oracle数据库访问功能的帮助类。其中SqlHelper类基于Microsoft Data Access Application Block for .NET |
Model |
该项目中的类用于实现业务实体,例如,表示宠物的ItemInfo、表示宠物类别的CategoryInfo等 |
IProfileDAL、ProfileDALFactory、SQLProfileDAL、和OracleProfileDAL |
这些项目使用简化的抽象工厂模式和依赖注入技术实现了个性化用户配置功能的具体数据访问。IProfileDAL项目中包括一个接口IPetShopProfileProvider,该接口中包括多个方法。ProfileDALFactory项目用于实现工厂类。SQLProfileDAL项目用于实现当应用程序使用SQL Server数据库作为数据存储时,抽象工厂模式中的具体产品类,该类均实现了IProfileDAL中对应接口的成员方法。OracleProfileDAL的实现与SQLProfileDAL类似,然而其仅当使用Oracle数据库作为数据存储时才调用 |
Profile |
该项目实现了一个继承自ProfileProvider基类的用户配置提供程序PetShopProfileProvider |
Membership |
该项目实现了一个继承自MembershipProvider基类的成员资格提供程序OracleMembershipProvider,该类用于当应用程序使用Oracle数据库作为数据存储时,完成成员资格管理方面的数据访问 |
续表
项 目 名 称 |
说 明 |
IMessaging、MessagingFactory和MSMQMessaging |
这些项目使用简化的抽象工厂模式实现订单的消息队列。IMessaging项目中实现了接口IOrder,其中包括Receive、Send等方法。MessagingFactory用于实现工厂类。MSMQMessaging项目中实现一个类Order,该类实现了接口IOrder中定义的成员方法,其用于从消息对列中接收和发送订单 |
BLL、 |
实现应用程序业务逻辑,例如,管理宠物类别、单个宠物、宠物列表、订单处理等 |
IBLLStrategy |
为实现同步和异步订单处理功能而定义接口IOrderStrategy。该接口中定义了Insert方法。IOraderStrategy与BLL项目中的Order、OrderAsynchronous和OrderSynchronous类共同创建应用了策略模式 |
OrderProcessor |
该项目实现了一个控制台应用程序,用于处理来自消息队列的异步订单 |
<!--[if !supportEmptyParas]--> <!--[endif]-->
表18-1简要介绍了PetShop 4.0包括的22个项目。在PetShop 4.0创建过程中,大量应用了ASP.NET 2.0的新增功能,例如,用户配置、成员资格管理、主题、SQL数据缓存依赖、数据访问等。另外,还包括各种设计模式应用、消息队列、同步/异步处理等。
为帮助读者更快更好地了解PetShop 4.0应用程序的实现,下面首先从体系架构分析入手,以便对应用程序的实现建立概括性了解。
体系架构简介
企业级应用程序功能都比较复杂,因此,多数采用分层方式进行开发。通常情况下,应用程序的逻辑功能可以分为外观内容表现、数据访问、自身功能逻辑等部分。所谓“分层”是指根据这些逻辑功能,将应用程序划分为不同的模块加以实现。此处的“模块”就是指“层”。每个层实现应用程序一个方面的逻辑功能。通过层与层之间的交互,形成应用程序体系架构,从而实现适应于企业级应用的,功能复杂的应用程序。
最常见的体系架构将应用程序实现划分为以下3个层:表示层、业务逻辑层和数据访问层。有关三层体系架构的基本概念,读者可参考“10.5.1 N层应用程序概述”一节。除三层体系架构之外,还出现过其他N层(N>3)体系架构。无论体系架构如何变化,都离不开三层体系架构的指引,其他N层开发都是基于三层架构的扩展形式。
采用软件分层开发的核心目的是为适应企业级应用日益增长的复杂度和灵活性等要求。在此核心目的指引下,通过软件分层高内聚、低耦合原则,实现易于扩展、维护和重用的要求,同时,必须有利于开发者分工,从而提高开发效率等。然而,这种方法也有不足,例如,开发难度增大,程序执行效率有所降低等。
PetShop 4.0作为企业级应用开发经典范例,在以上这些方面都有所考虑。随着本章内容的逐渐深入,读者将慢慢对这些内容有所了解。下面具体探讨一下PetShop 4.0的体系架构。图18-14所示显示了该应用程序体系架构图。
PetShop 4.0采用了典型的三层体系架构,将应用程序实现分为表示层、业务逻辑层和数据访问层。
<!--[if !vml]--><!--[endif]--> 表示层
PetShop 4.0的表示层由以下几个部分组成:一是实现常见用户界面的部分,例如,宠物类别信息、单个宠物详细信息列表、搜索等。二是实现成员管理和用户配置的部分,例如,用户登录/退出、注册新用户、维护用户信息、购物车、意向清单等。三是现SQL数据缓存依赖的部分。这主要是一些针对Category、Item和Product表的缓存依赖内容。四是实现处理来自消息队列的异步订单,这部分实现包含在OrderProcessor控制台程序中。以上这些内容的实现主要利用了ASP.NET窗体、用户控件、母版页、Wizard控件、登录系列控件、各种类等。
<!--[if !vml]--><!--[endif]-->
图18-14 PetShop 4.0体系架构
<!--[if !vml]--><!--[endif]--> 业务逻辑层
业务逻辑层包含宠物商店中与核心业务相关的逻辑。例如,Category、Product、Inventory、Items和Cart类。以Cart类为例,该类实现购物车功能,其中包括获取购物车商品数量、设置单个宠物购买数量、计算总价、添加/删除宠物等多个方法。另外,业务逻辑层中还包括实现订单处理的Order。实现订单处理有两种方式,一种是同步订单处理,另一种是异步订单处理。
<!--[if !vml]--><!--[endif]--> 数据访问层
数据访问层中包含与数据存储进行交互的多种组件。这些组件在功能上和业务逻辑层相互独立。PetShop 4.0的数据访问层包括以下几个部分:一是实现针对Oracle数据库的成员资格提供程序(针对SQL Server数据库的成员资格提供程序为ASP.NET 2.0内置)。二是实现自定义用户配置提供程序,包括针对Oracle和SQL Server两种类型。三是实现部分业务逻辑所需要的数据访问功能,例如,Item、Category、Order、Inventory、Product类等。四是实现消息队列访问功能。
另外,PetShop 4.0应用程序体系架构中还包括数据存储和对象模型。
<!--[if !vml]--><!--[endif]--> 数据存储
PetShop 4.0支持多种数据存储方式,例如,SQL Server 2000/2005、Oracle 10g。如果需要将数据存储在其他类型数据源中,则必须自定义数据访问层。另外,为了实现异步订单处理,PetShop 4.0中使用了消息队列MSMQ。
<!--[if !vml]--><!--[endif]--> 对象模型
对象模型也称为业务实体。主要用于表示数据存储中的持久对象。简单地说,业务实体可以模拟为一个或多个逻辑表,内容可能来自于一个或者多个数据库中物理表中的字段。利用业务实体提供的方便,PetShop 4.0的3个层能够以共享方式访问、表示数据库记录。在PetShop 4.0中建立了多个业务实体,它们都包含在Model项目中,例如,表示客户信息的AddressInfo类、表示单个宠物的ItemInfo类,还有CartItemInfo、CategoryInfo、CustomProfileInfo等。
虽然从图18-14所示的体系架构中难以区分数据存储和对象模型属于哪个层,但是通常认为,数据存储隶属于数据访问层,对象模型隶属于业务逻辑层。
从以上体系架构可以看出,PetShop 4.0具有很好的高内聚、低耦合特征,同时,易于实现扩展和维护。也比较适合于多人并行开发,有助于提高开发效率。