五十七:在分层架构中缓存数据

五十七:在分层架构中缓存数据

ID:47020606

大小:88.89 KB

页数:15页

时间:2019-06-17

五十七:在分层架构中缓存数据_第1页
五十七:在分层架构中缓存数据_第2页
五十七:在分层架构中缓存数据_第3页
五十七:在分层架构中缓存数据_第4页
五十七:在分层架构中缓存数据_第5页
资源描述:

《五十七:在分层架构中缓存数据》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、在ASP.NET2.0中操作数据之五十七:在分层架构中缓存数据作者:heker2007字体:[增加 减小]类型:转载时间:2016-05-17 我要评论上一篇文章我们介绍了ASP.NET2.0中使用ObjectDataSource在视图层缓存数据,缺点是不言而喻的,为了达到低耦合,本文介绍如何在三层架构中使用缓存技术来缓存数据。导言:  正如前面章节所言,缓存ObjectDataSource的数据只需要简单的设置一些属性。然而,它是在表现层对数据缓存,这就与ASP.NETpage页面缓存策略(cachingpo

2、licies)紧密的耦合(tightlycouples)起来。我们对体系机构分层的原因之一便是打破这种耦合。拿业务逻辑层为例,将业务逻辑从ASP.NET页面脱离出来;而数据访问层将数据访问的细节ASP.NET页面脱离出来。从某种意义来说,将业务逻辑和数据访问细节脱离出来是首先,这样的话使系统更易读、易维护、易修改,便于按模块分工—比如,表现层的开发者对数据库的细节不甚了解也不妨碍其开发工作。当然,将缓存策略从表现层脱离出来也有类似的好处。  本文我们将对层次机构进行扩充,新添一个缓存层(CachingLayer

3、,简称CL)以实施缓存策略。该缓存层包括一个ProductsCL类,该类用类似GetProducts(),GetProductsByCategoryID(categoryID)等方法来访问产品信息。调用这些方法时先从内存检索数据,如果内存为空则调用业务逻辑层BLL里的ProductsBLL类的相应方法,再从数据访问层DAL返回获取的数据。该ProductsCL类的方法从业务逻辑层BLL获取数据后先对数据缓存后再返回。如图1所示,缓存层CL位于表现层和业务逻辑层。图1:在我们的体系结构中缓存层(CL)是单独的一层

4、第一步:创建缓存层的类  在本文,我们创建的缓存层仅仅包含一个ProductsCL类,它只有几个方法。  完整的缓存层还应该包含CategoriesCL,EmployeesCL,和SuppliersCL类。有了业务逻辑层BLL和数据访问层DAL,缓存层完全可以当成一个单独的类库工程(ClassLibraryproject),不过我们将它作为App_Code文件夹里的一个类来处理。  为了更好的将缓存层类和DAL类、BLL类区分开,我们在App_Code文件夹里创建一个新的子文件夹。在资源管理器里右击App_Co

5、de文件夹,选择“新文件夹”,命名为CL,在里面添加新类ProductsCL.cs图2:添加名为CL的文件夹和名为ProductsCL.cs的类  跟BLL里的ProductsBLL类一样,ProductsCL类应该包含相同的数据访问和修改方法。不过在本文,我们只创建GetProducts()方法(在第3步)和GetProductsByCategoryID(categoryID)方法(在第4步)。你可以在空闲的时候对ProductsCL类进行完善,并创建相应的CategoriesCL,EmployeesCL和S

6、uppliersCL类第二步:对DataCache进行读和写  ObjectDataSource的缓存属性使用ASP.NETdatacache来存储从BLL获取的数据。要访问datacache,可以从ASP.NET页面的code-behindclasses类或体系结构层(architecture)的类来访问。要通过ASP.NET页面的code-behindclasses类对datacache进行读写,可使用如下模式:?12//Readfromthecache(读)objectvalue=Cache["key"]

7、;?12345//Addanewitemtothecache(写)Cache["key"]=value;Cache.Insert(key,value);Cache.Insert(key,value,CacheDependency);Cache.Insert(key,value,CacheDependency,DateTime,TimeSpan);  Cacheclass类的Insert方法可以有很多的重载。Cache["key"]=value和Cache.Insert(key,value)是相同的,都是向cac

8、he添加一个条目(item),不过没有指定expiry(可以理解为缓存持续时间)。更具代表性的是,在我们向cache添加条目的时候指定一个expiry,它要么是dependency(从属体),要么是time-basedexpiry,又或者两者兼而有之,比如上面的最后2个表达式。  如果所需的数据存储在内存的话,首先调用缓存层的方法返回数据。如果不在内存的话就调用BLL里相应的方法。数据

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。