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

数据层的个性配置

可以很容易就知道,在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*不知道该类和上面几个类(接口)有什么关系
XXXX  XXXX
 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就是保存缓存依赖表的.表内容如下图:

image

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

存储过程名称说明
AspNet_SqlCachePollingStoredProcedure通知应用程序哪个表发生了变化
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure查询注册过的缓存依赖表
AspNet_SqlCacheRegisterTableStoredProcedure注册缓存表,并为缓存表添加触发器,以获取缓存表的变化
AspNet_SqlCacheUnRegisterTableStoredProcedure去除表的缓存依赖
AspNet_SqlCacheUpdateChangeIdStoredProcedure当表的数据变化时,让changeId自动加1

由上表可以得知,解决第一个问题的方法是:通过存储过程AspNet_SqlCachePollingStoredProcedure来通知,当然其中用到了触发器,以实现自动通知.

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

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

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

image

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值