您的位置:首页 > 运维架构

.Net Pet Shop 4 初探之二:数据层(DAL)简析(下)

2008-12-18 12:48 351 查看
数据层的个性配置

可以很容易就知道,在Pet Shop 4中,客户个性配置的功能也是采用了工厂模式设计,故其结构和思路跟DAL中的数据访问功能很相似.

实现个性配置相关的文件如下表:

项目名称文件名称类(接口)名称说明
ProfileDALFactory工厂
DataAccess.csDataAccess根据Web.congif文件中ProfileDAL结点中的profile项目决定实例化哪个类来完成个性化配置功能
IProfileDAL接口
IPetShopProfileProvider.csIPetShopProfileProvider提供个性化配置要用到的全部方法的定义
SQLProfileDAL
PetShopProfileProvider.csPetShopProfileProvider针对SQLServer数据库,继承自IPetShopProfileProvider接口,实现其全部方法
OracleProfileDAL
PetShopProfileProvider.csPetShopProfileProvider针对Oracle数据库,继承自IPetShopProfileProvider接口,实现其全部方法
Profile不明其具体功能(有待进一步研究)
PetShopProfileProvider.csPetShopProfileProvider*不知道该类和上面几个类(接口)有什么关系
XXXXXXXX
XXXXProfileProvider*Profile项目中的PetShopProfileProvider类继承处该类,但目前不知该类的出处,对访类一无所知
注:以上*号标注部分有待进一步研究,如有熟知的朋友,谢谢告诉我一声.

数据层的缓存依赖

缓存依赖,是当用户本地缓存的数据在数据库(服务器)端发生变化时,数据库能够通知用户本地缓存,使得本得缓存能够重新读取新的数据到缓存中,实现缓存数据和数据库实际数据的同步,可以大大提高数据库访问的性能.

值得注意的是:PetShop4中只提供了SQLServer的数据缓存处理类:SqlCacheDependency类.

这里的缓存依赖同样采用了工厂模式.

项目名称文件名称类(接口)名称说明
ICacheDependency缓存依赖的接口
IPetShopCacheDependency.csIPetSpopCacheDependency创建缓存实例,返回一个AggregateCacheDependency类,用来监控依赖项,如果依赖项对象发生了改变,则移除缓存Cache中的此对象,并读取新的缓存版本.
TableCacheDependency缓存依赖的实现
TableDependency.csTableDependency通过Web.config文件中的CacheDatabaseName和configKey,判断要缓存的数据库和键值(表),并添加到缓存中.
Product.cs,Item.cs,Category.csProduct,Item,Category继承自TableDependency类,为父类提供数据库的表名称的参数.
CacheDependencyFactory工厂
DependencyAccess.csDependencyAccess通过判断Web.config文件中的CacheDependencyAssembly项目,返回缓存实例
DependencyFacade.csDependencyFacade采用外观设计模式,该类是用户真正调用的类,用于包装复杂的调用,它只提供几个简单的GetCategoryDependency(),GetProductDependency(),GetItemDependency()方法,来调用DependencyAccess类
缓存依赖的实现机制

要实现缓存依赖,必须知道两大要素:一上DBMS如何知道哪个数据库需要缓存依赖,二是应用程序如何知道哪个数据库和表有缓存了.

解决第一个问题的方法是:在DBMS上注册数据库的缓存依赖.通过数据库注册工具aspnet_regsql来实现注册,在命令行状态下:

aspnet_regsql -S localhost -U mspetshop -P pass@word1 -d MSPetShop4 -et -t Catagory

各参数的说明如下表:

参数名称说明
-S服务器名称
-U登录名
-P登录用户密码
-E使用Windows验证
-t对哪个表采用缓存依赖
-d对哪个数据库采用缓存依赖
-ed允许对数据使用缓存依赖
-dd禁止对用户使用缓存依赖
-et允许对某表使用缓存依赖
-dt禁止对某表使用缓存依赖
-lt列出使用使用缓存依赖的表
PetShop4中,数据库MSPetShop4中表AspNet_SqlCacheTableForChangeNotification就是保存缓存依赖表的.表内容如下图:





当表的内容发生变化时,相关的存储过程和触发器就让changeId自动加1,并修改缓存表和获取缓存表的信息.相关的存储过程如下表:

存储过程名称说明
AspNet_SqlCachePollingStoredProcedure通知应用程序哪个表发生了变化
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure查询注册过的缓存依赖表
AspNet_SqlCacheRegisterTableStoredProcedure注册缓存表,并为缓存表添加触发器,以获取缓存表的变化
AspNet_SqlCacheUnRegisterTableStoredProcedure去除表的缓存依赖
AspNet_SqlCacheUpdateChangeIdStoredProcedure当表的数据变化时,让changeId自动加1
由上表可以得知,解决第一个问题的方法是:通过存储过程AspNet_SqlCachePollingStoredProcedure来通知,当然其中用到了触发器,以实现自动通知.

整个缓存注册的过程可以表示成下面的形式:

注册数据库缓存依赖->在数据库中自动添加缓存表->自动添加存储过程->存储过程添加触发器->通过触发器通知哪个表发生了变化->更新changeId.

另外还必须在Web.config中配置:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: