Я хочу разработать автоматизированный способ сохранения / извлечения данных из cache
.Вот как я хочу спроектировать архитектуру для него.
Было бы 2 библиотеки классов
DB.DataAccess -> Этот слой будет выполнять sp/ требует использования ado.net для доступа к данным из базы данных
DB.DataDistributor -> Это будет промежуточный уровень между базой данных и уровнем представления, вызовите DB.DataAccess для получения данных
в DB.DataDistributor. Я хочу автоматизировать кэширование данных следующим образом, используя пользовательский атрибут.
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
.
Если у кого-то есть идеи или другие хорошие подходы к автоматизации кэширования, поделитесь.