前言
早就听说.Net Pet Shop是学习ASP.net三层架构体系的最佳实例教材,近日学习中不断接触到三层架构的实例,对这一设计模式一直一知半解的我,决定彻底研究一下.Net Pet Shop.
关于.Net Pet Shop
凡是对于搞JAVA的朋友们,肯定都知道Java Pet Shop的大名,想必朋友们也一定猜到了.Net Pet Shop和Java Pet Shop的关系了.是的,它就是MS模仿参照Java Pet Shop而搞出来的.Net版.Java平台和.Net平台的竞争从两都同时出现在这个世上的那一天起就一直不有停止过.可以说Java Pet Shop代表的Jave平台的最先进开发思想,强大开发能力和灵活开发架构.而MS当然也不甘示弱,自然要在.Net平台上用.Net Pet Shop与Java一决高下,于是就有了集.Net先进思想和强大能力的实用多层架构于一身的.Net Pet Shop.这里且不说两个平台的优劣,因为这也不是一两句话能说得清楚的,关键是要学到例程中的开发思想并将它们应用于今后的项目实战.这才是我们学习研究.Net Pet Shop的最终目的.
目前,(2008年底).Net Pet Shop的最新版本是.Net Pet Shop 4,这是使用.net 2.0框架的网络实例.新的Petshop4实现了与Petshop 3相同甚至更多的特性,由于采用了Master Pages,Membership,以及Profile,SqlCacheDependency,但是代码量却减少了四分之一.同时,在事务,数据缓存,安全方面使用了.NET 2.0附带的特性,构建了一个灵活的最佳实践的应用程序.关于.Net Pet Shop 4 的详细介绍,朋友们可以从以下网址看到MS官方的说明:http://msdn.microsoft.com/zh-cn/library/aa479070.aspx
.Net Pet Shop 4的下载
这是来自于MS官方的下载链接.文件是一个MSI的标准安装格式,大小只有2.3M.
我的安装环境
操作系统 | WINDOWS XP PRO SP3 CHS |
浏览器 | IE6 |
.NET Framework | .NET Framework 3.5 |
开发工具 | Visual Studio 2008 |
网络服务器 | IIS6 |
DBMS | SQL Server 2005 Dev |
.Net Pet Shop 4的安装
.Net Pet Shop 4是英文版的,其安装过程很简单,与一般的程序安装一样,一路"Next",直到出现"Installation Options"窗口时.默认选择的是只安装源代码,由于是首次安装,我选择了全部安装(包括源码与数据库).接着"Next"直到打开"DataBase Setup"窗口,选择使用数据库服务器的类型,服务器名以及登录验证模式,测试连接正常后继续.这样安装过程就完成了.
需要说明的是,在安装数据库的时候,我选择采用SQL Server认证模式,并输入正确的用户名和密码(用它登录SQL Server 2005 Management Studio 没有问题)时提示"验证无效",只好改用Windows验认模式了.
安装完成以后.安装程序会将源代码复制到你指定的目录下,并将用到的四个数据库自动附加到SQL Server中,由于.Net Pet Shop 4中采用的登录用户是mspetshop,所以,安装程序还会自动配置该用户,包括登录密码和映射的数据库对象等.
.Net Pet Shop 4数据库初步分析
.Net Pet Shop 4数据库共有4个,分别如下
1,MSPetShop4库,这是一个基本信息数据库,包括商品类别,商品详情,供应商信息等内容,其包含的表格信息如下表:
表名称 | 功能描述 | 包含内容 |
AspNet_SqlCacheTableForChangeNotification | 数据库缓存依赖信息表 | 记录该库内各表之间的约束关系 |
Category | 商品目录表(大类) | 商品类别信息 |
Inventory | 商品数量信息表 | 商品库存数量清单 |
Item | 商品详细信息表(具体商品) | 具体商品名称,价格,图片等信息 |
Product | 商品基本信息表(小类) | 商品的所属类别,名称及简单描述等信息 |
Supplier | 供应商信息表 | 供应商基本信息数据 |
表间关系图:
2,MSPetShop4Orders库,这是一个订单管理数据库,包括订单基本信息及订单的详细项目信息等内容,其包含的表格信息如下表:
表名称 | 功能描述 | 包含内容 |
LineItem | 订单明细表 | 每个订单所订的具体商品的数量和单价 |
Orders | 订单表 | 所有订单的基本信息 |
OrderStatus | 订单状态表 | 记录每个订单的当前状态及状态变更时间 |
表间关系图:
3,MSPetShop4Profile库,这是一个客户配置数据库,包括客户个人配置信息等内容,其包含的表格信息如下表:
表名称 | 功能描述 | 包含内容 |
Profiles | 客户个人配置信息表 | 活动日期,更新日期等信息 |
Account | 客户账号信息表 | 客户基本账户信息 |
Cart | 客户购物篮信息表 | 客户选择的产品,数量等信息及购物篮类型 |
表间关系图:
4,MSPetShop4Services库,这是一个系统服务数据库,所有的表都是以"aspnet_"开头的,这些表是在ASP.Net 2.0中自动生成的,可以通过MemberShip等操作类直接读取数据库中的数据,其包含的表格信息如下表:
表名称 | 功能描述 | 包含内容 |
aspnet_Applications | 应用程序基本信息表 | 程序名,程序描述等 |
aspnet_MembersShip | 用户信息表 | 用户名,邮箱等用户用户基本信息 |
aspnet_Paths | 应用程序路径信息表 | 应用程序路径信息 |
aspnet_PersonalizationPerUser | 用户个性化信息表 | 所有用户的共同个性化信息 |
aspnet_Profile | 个性化配置内容表 | 用户个性化配置的内容 |
aspnet_Roles | 角色表 | 系统角色列表 |
aspnet_SchemaVersions | 版本信息表 | 各部分的版本信息 |
aspnet_Users | 用户表 | 系统用户列表 |
aspnet_UsersInRoles | 用户角色关系表 | 用户与角色的关系 |
aspnet_WebEvent_Events | 事件日志表 | 事件日志信息 |
表间关系图:
以上罗列了.Net Pet Shop 4 系统中的所以数据库和数据库中的表,并对各表的作用作了简单的说明,其实,对于数据库部分,还可以有很多更加深入的研究.比如:
- 为什么不用1个数据库来存入所有的表?这样的做的好处是显而易见的:首先,4个数据库可以分布在不同的服务器上,可以达到负载平衡的目的;其次,当其中某数据库繁忙时,不至于影响到别的库为客户正常提供其它服务.提高了各功能之间的独立性.当然,MS可能还基于其它方面的考虑,朋友们可以就这一问题展开讨论.
- 为什么不把MSPetShop4Services库中的aspnet_Users,aspnet_MembersShip,aspnet_Profile三个表合成一个?它们之间都是一对一的关系.我想:这可能是基于性能方面的考虑吧.
- MSPetShop4Services库中的用户表和角色表之间本来是一种多对多的关系,即一个用户可以对应多种角色,一种角色也可是包含多个用户,为了表示这种多对多的关系,在数据库中通常是把它拆分成两个一对多的关系,生成一个关系表,即用户角色关系表.这种处理多对多关系的方法在数据库设计方面应用很常见.
Web.config文件加解密
Asp.net程序都有一个Web.config文件,它是应用程序的配置文件.细心的朋友可能早就发现,.Net Pet Shop 4 中的配置文件中的数据库连接字符串居然是一连串杂乱无章的字符,显然,它们已经被加密了.我们可以运行.Net Pet Shop 4 程序安装目录下的"DecryptWebConfig.bat"来对其进行解密,同样也可以运行旁边的"EncryptWebConfig.bat"来再次加密Web.config文件.
用记事本打开"DecryptWebConfig.bat"和"EncryptWebConfig.bat",,这是两个批处理文件,内容如下:
@echo off
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" "E:\Lucker Develop Library(LDL)\Tech Tutorial\.NET Pet Shop 4.0\Web"
PAUSE
@echo off
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" "E:\Lucker Develop Library(LDL)\Tech Tutorial\.NET Pet Shop 4.0\Web"
PAUSE
原来,采用aspnet_regiis.exe -pdf 对文件的connectionStrings节进行了解密操作.用aspnet_regiis.exe -pef 对文件的connectionStrings节进行了加密操作.
项目内容概览
从整体可以看出,Pet Shop 4的项目体系已经很庞大,一共含有22个项目,如下:
查询网上相关文章,得到各项目的描述及功能分块列表(以字体着色区分)如下:
对于一名初学者来说,这么多的项目本身就是一种负担,但是,我们可以根据项目的命名来大致的区分出该项目的分层及功能,因为系统中项目的命名采用了形如"名称+层名"的形式,一般的:
项目名称后缀(层) | 说明 | 内容 |
BLL | 业务逻辑层 | 与具体业务相关的类 |
DAL | 数据访问层 | 所有与数据库访问相关的操作 |
Factory | 工厂模式 | (暂时不很明白) |
Strategy | 策略模式 | (暂时不很明白) |
Web | 界面UI层 | 所能界面与用户控件 |
再深入一步,网络上还可以找到以上项目相互之间的关系和调用图:
※※※※※※※※※※※※※※--我的程序人生--※※※※※※※※※※※※※※