這篇不是我想的,是部落格園的老趙想的,很是不錯.俺就借過來了.原文是您善於使用匿名函數嗎?
我只是把重用的地方封裝到一個類裡面了
public static class CacheHelper
{
public delegate bool CacheGetter<TData>(out TData data);
public delegate TData Func<TData>();
public delegate void Actions<TData>(TData data);
public static TData Get<TData>(CacheGetter<TData> cacheGetter,Func<TData> sourceGetter,Actions<TData> cacheSetter)
{
TData data;
if (cacheGetter(out data))
{
return data;
}
data = sourceGetter();
cacheSetter(data);
return data;
}
public static TData Get<TData>(string cacheKey, Func<TData> cacheGetter)
{
TData data;
object objData = FrameworkCache.SMCache.GetCacheService().RetrieveObject(cacheKey);
data = (objData == null) ? default(TData) : (TData)objData;
if (objData != null)
{
return data;
}
else
{
data = cacheGetter();
FrameworkCache.SMCache.GetCacheService().AddObject(cacheKey, data);
return data;
}
}
}
第一個方法是去緩衝的委託也放開了,第二個方法是把加緩衝取緩衝的方法封進去了,因為我的項目裡面一般加取緩衝的方法都是一樣的,只是key不一樣罷了.
調用的時候:
string cacheKey = "ListCountOfProvince";
return CacheHelper.Get<IList<Bisou.Model.Bs_Area>>(
cacheKey,
delegate() // source getter
{
///讀資料.....
return 資料集;
});
又剩了不少代碼!