我想设计一种自动保存/检索cache
数据的方法。这就是我想要为它设计架构的方式。
将有2个类库
DB.DataDistributor中的DB.DataAccess - >该层将使用执行sp / quires ado.net从数据库访问数据
DB.DataDistributor - >这将是db和。之间的中间层 表示层调用DB.DataAccess来获取数据
我想通过自定义属性以这种方式自动化数据缓存。
namespace DB.DataDistributor
{
public class MessageManager
{
[CachDataAttribute(CacheKey = CacheKeys.Message, CacheDataType = typeof(List<Message>))]
public List<Message> GetMessages()
{
DB.DataAccess.MesssageManager msgManager = null;
try
{
msgManager = new DB.DataAccess.MesssageManager();
var messages = msgManager.GetMessages();
return messages;
}
catch (Exception)
{
throw;
}
finally
{
msgManager = null;
}
}
}
}
namespace DB.DataDistributor
{
[AttributeUsage(AttributeTargets.Method)]
internal class DataCachingFilterAttribute : Attribute
{
public CacheKeys CacheKey { get; set; }
public Type CacheDataType { get; set; }
public void SetCache()
{
//this method should call after execution of method where DataCachingFilterAttribute has attached
}
public void GetCache()
{
//this method should call before execution of method where DataCachingFilterAttribute has attached
//here I will check if data available in cache then will return data from cache and do not call the achtual method
}
}
public enum CacheKeys
{
Message
}
}
每当表示层调用GetMessages
方法时
DB.DataDistributor.MessageManager
系统应该执行
GetCache()
类的DataCachingFilterAttribute
方法,如果是数据
在缓存中找到实际方法GetMessages
不应该
已执行并且数据从名为GetMessages
的缓存中直接返回,并从那里返回数据。
从GetMessages
SetCache
方法返回结果后立即生效
DataCachingFilterAttribute
应调用将结果设置为缓存。
我的想法是自动化数据缓存,但我没有得到如何在DataCachingFilterAttribute
方法执行之前和之后触发GetMessages
方法。
如果有任何想法或其他好的方法来自动化缓存,请分享。