PetShop之ASP.NET缓存--three
public static class ProductDataProxy
{
private static readonly int productTimeout = int.Parse(ConfigurationManager.AppSettings[”ProductCacheDuration”]);
private static readonly bool enableCaching = bool.Parse(ConfigurationManager.AppSettings[”EnableCaching”]);
public static IList
GetProductsByCategory(string category)
{
Product product = new Product();
if (!enableCaching)
return product.GetProductsByCategory(category);
string key = “product_by_category_” + category;
IList data = (IList )HttpRuntime.Cache[key];
// Check if the data exists in the data cache
if (data == null)
{
data = product.GetProductsByCategory(category);
// Create a AggregateCacheDependency object from the factory
AggregateCacheDependency cd = DependencyFacade.GetProductDependency();
// Store the output in the data cache, and Add the necessary AggregateCacheDependency object
HttpRuntime.Cache.Add(key, data, cd, DateTime.Now.AddHours(productTimeout), Cache.NoSlidingExpiration, CacheItemPriority.High, null);
}
return data;
}
}
与业务逻辑层Product对象的GetProductsByCategory()方法相比,增加了缓存机制。当缓存内不存在相关数据项时, 则直接调用业务逻辑层Product的GetProductsByCategory()方法来获取数据,并将其与对应的 AggregateCacheDependency对象一起存储在缓存中。
引入Proxy模式,实现了在缓存级别上对业务对象的封装,增强了对业务对象的控制。由于暴露在对象外的方法是一致的,因而对于调用方而言,调用代理对象与真实对象并没有实质的区别。
从职责分离与分层设计的角度分析,我更希望这些Proxy对象是被定义在业务逻辑层中,而不像在PetShop的设计那样,被划分到表示层 UI中。此外,如果需要考虑程序的可扩展性与可替换性,我们还可以为真实对象与代理对象建立统一的接口或抽象类。然而,单以PetShop的表示层调用来 看,采用静态类与静态方法的方式,或许更为合理。我们需要谨记,“过度设计”是软件设计的警戒线。
如果需要对UI层采用缓存机制,将应用程序数据存放到缓存中,就可以调用这些代理对象。以ProductsControl用户控件为例,调用方式如下:
productsList.DataSource = ProductDataProxy.GetProductsByCategory(categoryKey);
productsList对象属于自定义的CustomList类型,这是一个派生自System.Web.UI.WebControls.DataList控件的类,它的DataSource属性可以接受IList集合对象。
不过在PetShop 4.0的设计中,对于类似于ProductsControl类型的控件而言,采用的缓存机制是页输出缓存。我们可以从ProductsControl.ascx页面的Source代码中发现端倪:
< %@ OutputCache Duration="100000" VaryByParam="page;categoryId" %>
与ASP.NET 1.x的页输出缓存不同的是,在ASP.NET 2.0中,为ASP.NET用户控件新引入了CachePolicy属性,该属性的类型为ControlCachePolicy类,它以编程方式实现了对 ASP.NET用户控件的输出缓存设置。我们可以通过设置ControlCachePolicy类的Dependency属性,来设置与该用户控件相关的 依赖项,例如在ProductsControl用户控件中,进行如下的设置:
protected void Page_Load(object sender, EventArgs e)
{
this.CachePolicy.Dependency = DependencyFacade.GetProductDependency();
}
采用页输出缓存,并且利用ControlCachePolicy设置输出缓存,能够将业务数据与整个页面放入到缓存中。这种方式比起应用程序 缓存而言,在性能上有很大的提高。同时,它又通过引入的SqlCacheDependency特性有效地避免了“数据过期”的缺点,因而在PetShop 4.0中被广泛采用。相反,之前为Product、Category、Item业务对象建立的代理对象则被“投闲散置”,仅仅作为一种设计方法的展示而 “幸存”与整个系统的源代码中。
转载于:https://www.cnblogs.com/dequan-lee/archive/2007/04/27/729309.html
PetShop之ASP.NET缓存--three相关推荐
- PetShop之ASP.NET缓存
<解剖PetShop>系列之四 四 PetShop之ASP.NET缓存 如果对微型计算机硬件系统有足够的了解,那么我们对于Cache这个名词一定是耳熟能详的.在CPU以及主板的芯片中,都引 ...
- PetShop之ASP.NET缓存(转载)
<解剖PetShop>系列之四 四 PetShop之ASP.NET缓存 如果对微型计算机硬件系统有足够的了解,那么我们对于Cache这个名词一定是耳熟能详的.在CPU以及主板的芯片中,都引 ...
- [wayfarer]PetShop之ASP.NET缓存
原文地址: http://www.cnblogs.com/wayfarer/archive/2006/11/01/547060.html <解剖PetShop>系列之四 四 PetShop ...
- petshop4.0 详解之四(PetShop之ASP.NET缓存)
<p>如果对微型计算机硬件系统有足够的了解,那么我们对于Cache这个名词一定是耳熟能详的.在CPU以及主板的芯片中,都引入了这种名为高速缓冲存储器(Cache)的技术.因为Cache的存 ...
- PetShop 4.0 详解之四(PetShop之ASP.NET缓存)
如果对微型计算机硬件系统有足够的了解,那么我们对于Cache这个名词一定是耳熟能详的.在CPU以及主板的芯片中,都引入了这种名为高速缓冲存储器(Cache)的技术.因为Cache的存取速度比内存快,因 ...
- PetShop之ASP.NET缓存 --one
如果对微型计算机硬件系统有足够的了解,那么我们对于Cache这个名词一定是耳熟能详的.在CPU以及主板的芯片中,都引入了这种名为高速缓冲存储器 (Cache)的技术.因为Cache的存取速度比内存快, ...
- 浅谈ASP.NET 缓存技术
缓存是指系统或应用程序将频繁使用的数据保存到内存中,当系统或应用程序再次使用时,能构快速的获取数据.它的弊端在于显示的内容可能不是最新,最精确的.ASP.Net 缓存主要分为两大类: 网页输出缓存和应 ...
- asp.net缓存机制
一.缓存的类别 1.页面输出ASP.NET数据缓存 页面输出缓存是一种传统级别的相对简单的缓存机制.它将页面数据缓存在服务器内存中,当有客户端再次请求这些内容的时候,服务器可以直接将这些页面数据输出, ...
- [转]ASP.Net缓存总结
ASP.Net缓存总结 Asp.net 缓存技术总结 2008-04-01 17:29 提高性能最好最快的办法当然是通过缓存来改善,对于任何一个web开发者都应该善用缓存.Asp.net下的缓存机制十 ...
最新文章
- 1乘到100 python_python每日一练之如何计算你的应发奖金?
- Nature子刊 | 研究人员提出神经脆性可作为癫痫发作区(SOZ)的脑电图(EEG)标志物
- String常用方法大全(深入源码层面分析)
- 数据科学 IPython 笔记本 8.4 简单的折线图
- python环境及pycharm开发环境安装_Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)...
- Java编译器调试不了_使用Maven设置Java编译器的-source和-target-不起作用
- 类型约束的本质:泛型是不完备类型,只有合乎要求的构造才能正确使用和访问。...
- 做网站用UTF-8编码还是GB2312编码?
- mysql 文本处理函数,MySQL常用的文本处理函数
- Croe文件在线预览
- 【Java设计模式】——工厂模式
- python倒计时弹框提示带注释_注意时间用python制作倒计时提醒工具
- PS网页设计教程XVII——在Photoshop中设计创意组合网页
- 应用宝认领应用签名_腾讯开放平台第三方应用签名参数sig的说明
- oracle付权,oracle权限总结
- 【机器学习】机器学习模型迭代方法(Python)
- 系统对接方案_报销费控SaaS对接财务系统解决方案
- PTA 吉老师的回归
- java记事本的撤回_对于记事本,怎样恢复刚刚撤销的?
- [数学理论]最大熵模型
热门文章
- 5.8 正则化和数据标准化
- jsp调用controller方法_SpringMVC五大核心组件及调用过程
- SQL server management 查询所有触发器
- biee mysql_BIEE 11g linux下连接mysql数据源
- 小红书最新用户量数据_小红书估值高达60亿美元?小红书超过蘑菇街了吗?
- #17# SCCM管理 - 软件中心 VS 应用程序目录网站点
- 小程序跳转页面与传值
- lamp架构-访问控制-禁止php解析、屏蔽curl命令访问
- Kubernetes应用部署模型解析(原理篇)
- c++中algorithm头文件、STL库简介及使用说明