国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

實戰 .Net 數據訪問層 - 16

2024-07-10 13:03:20
字體:
來源:轉載
供稿:網友
菜鳥學堂:
5. cache management

首先說明一點,之所以將cache management單列出來,就

是為了要說明數據緩存的重要性!在很多時候,這比撰寫data

access logic更讓人費心,也更令人難以把握。



作者的這個cache management實現了進行data cache時所

必須考慮的幾個問題,雖然還并不完善,但也可在實戰中運用了!

以下,就是它的結構示意圖:






從圖中,可以很明顯地看到,這個cache management方案

主要由3部分組成:manager class,delegate declaration,parameter

classes!

manager是總控制臺,所有的調用全部通過它來完成,對外

接口也盡可能地表現出一定的簡潔性。同時,由于cache

management一般都在整個application level實現,所以,毫無

疑問的,cachemanager又自動成為了一個singleton!

從上面的圖中,我們不難發現,cachemanager對外提供的真

正數據訪問方法只有一個:getcache(另一個是singleton訪問,

不算在內j)!



ok,就讓我們先來看看這個getcache到底做了些什么處理:





代碼14:探索cachemanager之getcache!

public delegate arraylist getarraylist();



public class cachemanager

{

// 用于確保singleton下thread-safe操作的dummy object

private static object _currentlocker = new object();



// 用于實現singleton的static object

private static cachemanager _current = null;



// 用于存放windows application的cache data

private hashtable _htwinappcache = null;



public arraylist getcache(cacheparam param, getarraylist del)

{

if (param == null)

return del();

else

{

if (iscacheexpired(param.name))

return (arraylist)updatecache(param, del());

else

return (arraylist)retrievecache(param.name);

}

}

...

}































































哇,原來是“騙人”的嘛!這所謂的“一個方法”居然不是返回object類型,還“振振有詞”地作了一次強制類型轉換!

沒錯,當前這個daf solution暫時只提供針對arraylist的cache management,而且,如果需要擴展為其它類型,在提供重載版本的新getcache方法之外,還必須提供相應的delegate聲明!

但是,請您相信,作者如此安排純粹是為了代碼修改和編譯起來更加方便(本文開頭已經聲明,可以通過visual studio .net 2003編譯支持.net framework 1.2的代碼),覺無“欺騙”之意j!



上文在講述data access logic時曾經提到anonymous delegate,這個新特性雖然只在c# 2.0中才被支持,但好歹有比較簡單的變通方法可以確保您的代碼在c# 1.0 compiler中編譯通過(請參考代碼11后面的說明)。但是,如果作者一旦在cachemanager中使用generics(另一個只在c# 2.0才被支持的特性)來完全實現“只有一個getcache方法”的cachemanager,反向調整起來就非常麻煩(讓其在visual studio .net 2003中編譯通過),所以,在這個版本中就采用了比較“土氣”的方法j,這并不影響我們討論cache management的實際功能(有興趣的朋友可以自己去試著用generics實現cachemanager,但別忘了delegate也必須以generic的方式進行聲明!另外,delegate之parameter list可以通過聲明“object[]”的方式并結合reflection技術進行傳遞!)



下一段:http://www.csdn.net/develop/read_article.asp?id=27560
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江城| 额济纳旗| 江西省| 南岸区| 天台县| 安丘市| 井陉县| 三门县| 九龙坡区| 惠州市| 博客| 和田市| 澄城县| 灵寿县| 安吉县| 广德县| 安国市| 瓮安县| 高要市| 新竹市| 佛冈县| 元江| 平定县| 江油市| 宣化县| 虹口区| 金平| 尼勒克县| 北宁市| 逊克县| 如东县| 交口县| 水富县| 南华县| 久治县| 信丰县| 同德县| 隆子县| 大姚县| 瓮安县| 桃源县|