锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲小说图区综合在线,久久亚洲AV成人无码国产最大,亚洲a无码综合a国产av中文http://www.tkk7.com/ljy032/category/28377.htmlasp.netzh-cnWed, 26 Dec 2007 11:54:12 GMTWed, 26 Dec 2007 11:54:12 GMT60petshop4.0璁捐璇存槑asp.net鍒濆鑰?/title><link>http://www.tkk7.com/ljy032/archive/2007/12/26/170637.html</link><dc:creator>椋庨洦鍏肩▼</dc:creator><author>椋庨洦鍏肩▼</author><pubDate>Wed, 26 Dec 2007 09:05:00 GMT</pubDate><guid>http://www.tkk7.com/ljy032/archive/2007/12/26/170637.html</guid><wfw:comment>http://www.tkk7.com/ljy032/comments/170637.html</wfw:comment><comments>http://www.tkk7.com/ljy032/archive/2007/12/26/170637.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/ljy032/comments/commentRss/170637.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/ljy032/services/trackbacks/170637.html</trackback:ping><description><![CDATA[petshop4.0璁捐璇存槑 <br /> 涓銆侀」鐩悕縐板強(qiáng)鎻忚堪錛?瀹炵幇姝ラ涓猴細(xì)4-3-6-5-2-1)<br /> 1銆乄EB錛濊〃紺哄眰<br /> 2銆丅LL錛濅笟鍔¢昏緫灞?br /> 3銆両DAL錛濇暟鎹闂眰鎺ュ彛瀹氫箟<br /> 4銆丮odel錛濅笟鍔″疄浣?br /> 5銆丏ALFactory錛濇暟鎹眰鐨勬娊璞″伐鍘?鍒涘緩鍙嶅皠)<br /> 6銆丼QLServerDAL錛漇QLServer鏁版嵁璁塊棶灞?/ OracleDAL錛漁racle鏁版嵁璁塊棶灞? <p>DBUtility 鏁版嵁搴撹闂粍浠跺熀紜綾?/p> <p>浜屻侀」鐩紩鐢ㄥ叧緋?br /> 1銆乄eb 寮曠敤 BLL銆?br /> 2銆丅LL 寮曠敤 IDAL錛孧odel錛屼嬌鐢―ALFactory鍒涘緩瀹炰緥銆?br /> 3銆両DAL 寮曠敤 Model銆?br /> 4銆丮odel 鏃犲紩鐢ㄣ?br /> 5銆丏ALFactory 寮曠敤IDAL錛岄氳繃璇誨彇web.config閲岃緗殑紼嬪簭闆嗭紝鍔犺澆綾葷殑瀹炰緥錛岃繑鍥炵粰BLL浣跨敤銆?br /> 6銆丼QLServerDAL 寮曠敤 Model鍜孖DAL錛岃DALFactory鍔犺澆鐨勭▼搴忛泦錛屽疄鐜版帴鍙i噷鐨勬柟娉曘?</p> <p><br /> 涓夈佸疄鐜版楠?br /> 1銆佸垱寤篗odel錛屽疄鐜頒笟鍔″疄浣撱?br /> 2銆佸垱寤篒DAL錛屽疄鐜版帴鍙c?br /> 3銆佸垱寤篠QLServerDAL錛屽疄鐜版帴鍙i噷鐨勬柟娉曘?br /> 4銆佸鍔爓eb.config閲岀殑閰嶇疆淇℃伅錛屼負(fù)SQLServerDAL鐨勭▼搴忛泦銆?br /> 5銆佸垱寤篋ALFactory錛岃繑鍥炵▼搴忛泦鐨勬寚瀹氱被鐨勫疄渚嬨?br /> 6銆佸垱寤築LL錛岃皟鐢―ALFactory錛屽緱鍒扮▼搴忛泦鎸囧畾綾葷殑瀹炰緥錛屽畬鎴愭暟鎹搷浣滄柟娉曘?br /> 7銆佸垱寤篧EB錛岃皟鐢˙LL閲岀殑鏁版嵁鎿嶄綔鏂規(guī)硶銆?/p> <p>娉ㄦ剰錛?br /> 1銆亀eb.config閲岀殑紼嬪簭闆嗗悕縐板繀欏諱笌SQLServerDAL閲岀殑杈撳嚭紼嬪簭闆嗗悕縐頒竴鑷淬?br /> 2銆丏ALFactory閲屽彧闇瑕佷竴涓狣ataAccess綾伙紝鍙互瀹屾垚鍒涘緩鎵鏈夌殑紼嬪簭闆嗗疄渚嬨?br /> 3銆侀」鐩垱寤哄悗錛屾敞鎰忎慨鏀瑰悇欏圭洰鐨勯粯璁ゅ懡鍚嶇┖闂村拰紼嬪簭闆嗗悕縐般?br /> 4銆佹敞鎰忎慨鏀硅В鍐蟲(chóng)柟妗堥噷鐨勯」鐩緷璧栥?br /> 5銆佹敞鎰忓湪瑙e喅鏂規(guī)閲屽鍔犲悇欏圭洰寮曠敤銆?/p> <img src ="http://www.tkk7.com/ljy032/aggbug/170637.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/ljy032/" target="_blank">椋庨洦鍏肩▼</a> 2007-12-26 17:05 <a href="http://www.tkk7.com/ljy032/archive/2007/12/26/170637.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍦≒etShop 4.0涓瑼SP.NET緙撳瓨鐨勫疄鐜?http://www.tkk7.com/ljy032/archive/2007/12/26/170547.html椋庨洦鍏肩▼椋庨洦鍏肩▼Wed, 26 Dec 2007 04:07:00 GMThttp://www.tkk7.com/ljy032/archive/2007/12/26/170547.htmlhttp://www.tkk7.com/ljy032/comments/170547.htmlhttp://www.tkk7.com/ljy032/archive/2007/12/26/170547.html#Feedback0http://www.tkk7.com/ljy032/comments/commentRss/170547.htmlhttp://www.tkk7.com/ljy032/services/trackbacks/170547.htmlPetShop浣滀負(fù)涓涓狟2C鐨勫疇鐗╃綉涓婂晢搴楋紝闇瑕佸厖鍒嗚冭檻璁垮鐨勭敤鎴蜂綋楠岋紝濡傛灉鍥犱負(fù)鏁版嵁閲忓ぇ鑰屽鑷碬eb鏈嶅姟鍣ㄧ殑鍝嶅簲涓嶅強(qiáng)鏃訛紝欏甸潰鍜屾煡璇㈡暟鎹繜榪熷緱涓嶅埌緇撴灉錛屼細(xì)鍥犳鑰岀牬鍧忓鎴瘋闂綉绔欑殑蹇?jī)鎯呭Q屽湪鑰楀敖鑰愬績(jī)鐨勭瓑寰呭悗錛屽彲鑳戒細(xì)澶卞幓榪欎竴閮ㄥ垎瀹㈡埛銆傛棤鐤戯紝榪欐槸闈炲父緋熺硶鐨勭粨鏋溿傚洜鑰屽湪瀵瑰叾榪涜浣撶郴鏋舵瀯璁捐鏃訛紝鏁翠釜緋葷粺鐨勬ц兘灝辨樉寰楁畩涓洪噸瑕併傜劧鑰岋紝鎴戜滑涓嶈兘鍥犲檸搴熼錛屽洜涓轟笓娉ㄤ簬鎬ц兘鑰屽拷鐣ユ暟鎹殑姝g‘鎬с傚湪PetShop 3.0鐗堟湰浠ュ強(qiáng)涔嬪墠鐨勭増鏈紝鍥犱負(fù)ASP.NET緙撳瓨鐨勫眬闄愭э紝榪欎竴闂騫舵病鏈夊緱鍒板緢濂界殑瑙e喅銆侾etShop 4.0鍒欏紩鍏ヤ簡(jiǎn)SqlCacheDependency鐗規(guī)э紝浣垮緱緋葷粺瀵圭紦瀛樼殑澶勭悊杈冧箣浠ュ墠澶т負(fù)鏀硅銆?/p>

4.3.1  CacheDependency鎺ュ彛

PetShop 4.0寮曞叆浜?jiǎn)SqlCacheDependency鐗規(guī)э紝瀵笴ategory銆丳roduct鍜孖tem鏁版嵁琛ㄥ搴旂殑緙撳瓨瀹炴柦浜?jiǎn)SQL Cache Invalidation鎶鏈傚綋瀵瑰簲鐨勬暟鎹〃鏁版嵁鍙戠敓鏇存敼鍚庯紝璇ユ妧鏈兘澶熷皢鐩稿叧欏逛粠緙撳瓨?shù)腑绉婚櫎銆傚疄鐜拌繖涓鎶鏈殑鏍稿績(jī)鏄疭qlCacheDependency綾伙紝瀹冪戶鎵夸簡(jiǎn)CacheDependency綾匯傜劧鑰屼負(fù)浜?jiǎn)淇濊瘉鏁翠釜鏋舵瀯鐨勫彲鎵╁睍鎬э紝鎴戜滑涔熷厑璁歌璁¤呭緩绔嬭嚜瀹氫箟鐨凜acheDependency綾伙紝鐢ㄤ互鎵╁睍緙撳瓨?shù)緷璧栥傝繖灝辨湁蹇呰涓篊acheDependency寤虹珛鎶借薄鎺ュ彛錛屽茍鍦╳eb.config鏂囦歡涓繘琛岄厤緗?/p>

鍦≒etShop 4.0鐨勫懡鍚嶇┖闂碢etShop.ICacheDependency涓紝瀹氫箟浜?jiǎn)鍚嶄负IPetShopCacheDependency鎺ュ彛錛屽畠浠呭寘鍚簡(jiǎn)涓涓帴鍙f柟娉曪細(xì)
public interface IPetShopCacheDependency
{      
    AggregateCacheDependency GetDependency();
}

AggregateCacheDependency鏄?Net Framework 2.0鏂板鐨勪竴涓被錛屽畠璐熻矗鐩戣渚濊禆欏瑰璞$殑闆嗗悎銆傚綋榪欎釜闆嗗悎涓殑浠繪剰涓涓緷璧栭」瀵硅薄鍙戠敓鏀瑰彉鏃訛紝璇ヤ緷璧栭」瀵硅薄瀵瑰簲鐨勭紦瀛樺璞¢兘灝嗚鑷姩縐婚櫎銆?br /> AggregateCacheDependency綾昏搗鍒頒簡(jiǎn)緇勫悎CacheDependency瀵硅薄鐨勪綔鐢紝瀹冨彲浠ュ皢澶氫釜CacheDependency瀵硅薄鐢氳嚦浜庝笉鍚岀被鍨嬬殑CacheDependency瀵硅薄涓庣紦瀛橀」寤虹珛鍏寵仈銆傜敱浜嶱etShop闇瑕佷負(fù)Category銆丳roduct鍜孖tem鏁版嵁琛ㄥ緩绔嬩緷璧栭」錛屽洜鑰孖PetShopCacheDependency鐨勬帴鍙f柟娉旼etDependency()鍏剁洰鐨勫氨鏄繑鍥炲緩绔嬩簡(jiǎn)榪欎簺渚濊禆欏圭殑AggregateCacheDependency瀵硅薄銆?/p>

4.3.2  CacheDependency瀹炵幇

CacheDependency鐨勫疄鐜版鏄負(fù)Category銆丳roduct鍜孖tem鏁版嵁琛ㄥ緩绔嬩簡(jiǎn)瀵瑰簲鐨凷qlCacheDependency綾誨瀷鐨勪緷璧栭」錛屽浠g爜鎵紺猴細(xì)
public abstract class TableDependency : IPetShopCacheDependency
{
    // This is the separator that's used in web.config
    protected char[] configurationSeparator = new char[] { ',' };

    protected AggregateCacheDependency dependency = new AggregateCacheDependency();
    protected TableDependency(string configKey)
    {
        string dbName = ConfigurationManager.AppSettings["CacheDatabaseName"];
        string tableConfig = ConfigurationManager.AppSettings[configKey];
        string[] tables = tableConfig.Split(configurationSeparator);

        foreach (string tableName in tables)
            dependency.Add(new SqlCacheDependency(dbName, tableName));
    }
    public AggregateCacheDependency GetDependency()
   {
        return dependency;
    }
}

闇瑕佸緩绔嬩緷璧栭」鐨勬暟鎹簱涓庢暟鎹〃閮介厤緗湪web.config鏂囦歡涓紝鍏惰緗涓嬶細(xì)
<add key="CacheDatabaseName" value="MSPetShop4"/>
<add key="CategoryTableDependency" value="Category"/>
<add key="ProductTableDependency" value="Product,Category"/>
<add key="ItemTableDependency" value="Product,Category,Item"/>

鏍規(guī)嵁鍚勪釜鏁版嵁琛ㄩ棿鐨勪緷璧栧叧緋伙紝鍥犺屼笉鍚岀殑鏁版嵁琛ㄩ渶瑕佸緩绔嬬殑渚濊禆欏逛篃鏄笉鐩稿悓鐨勶紝浠庨厤緗枃浠朵腑鐨剉alue鍊煎彲浠ョ湅鍑恒傜劧鑰屼笉綆″緩绔嬩緷璧栭」鐨勫瀵★紝鍏跺垱寤虹殑琛屼負(fù)閫昏緫閮芥槸鐩鎬技鐨勶紝鍥犺屽湪璁捐鏃訛紝鎶借薄浜?jiǎn)涓涓叡鍚岀殑綾籘ableDependency錛屽茍閫氳繃寤虹珛甯﹀弬鏁扮殑鏋勯犲嚱鏁幫紝瀹屾垚瀵逛緷璧栭」鐨勫緩绔嬨傜敱浜庢帴鍙f柟娉旼etDependency()鐨勫疄鐜頒腑錛岃繑鍥炵殑瀵硅薄dependency鏄湪鍙椾繚鎶ょ殑鏋勯犲嚱鏁板垱寤虹殑錛屽洜姝よ繖閲岀殑瀹炵幇鏂瑰紡涔熷彲浠ョ湅浣滄槸Template Method妯″紡鐨勭伒媧昏繍鐢ㄣ備緥濡俆ableDependency鐨勫瓙綾籔roduct錛屽氨鏄埄鐢ㄧ埗綾葷殑鏋勯犲嚱鏁板緩绔嬩簡(jiǎn)Product銆丆ategory鏁版嵁琛ㄧ殑SqlCacheDependency渚濊禆錛?br /> public class Product : TableDependency
{
    public Product() : base("ProductTableDependency") { }
}

濡傛灉闇瑕佽嚜瀹氫箟CacheDependency錛岄偅涔堝垱寤轟緷璧栭」鐨勬柟寮忓張鏈変笉鍚屻傜劧鑰屼笉綆℃槸鍒涘緩SqlCacheDependency瀵硅薄錛岃繕鏄嚜瀹氫箟鐨凜acheDependency瀵硅薄錛岄兘鏄皢榪欎簺渚濊禆欏規(guī)坊鍔犲埌AggregateCacheDependency綾諱腑錛屽洜鑰屾垜浠篃鍙互涓鴻嚜瀹氫箟CacheDependency寤虹珛涓撻棬鐨勭被錛屽彧瑕佸疄鐜癐PetShopCacheDependency鎺ュ彛鍗沖彲銆?/p>

4.3.3  CacheDependency宸ュ巶

緇ф壙浜?jiǎn)鎶借薄绫籘ableDependency鐨凱roduct銆丆ategory鍜孖tem綾誨潎闇瑕佸湪璋冪敤鏃跺垱寤哄悇鑷殑瀵硅薄銆傜敱浜庡畠浠殑鐖剁被TableDependency瀹炵幇浜?jiǎn)鎺ュ彛IPetShopCacheDependency錛屽洜鑰屽畠浠篃闂存帴瀹炵幇浜?jiǎn)IPetShopCacheDependency鎺ュ彛錛岃繖涓哄疄鐜板伐鍘傛ā寮忔彁渚涗簡(jiǎn)鍓嶆彁銆?/p>

鍦≒etShop 4.0涓紝渚濈劧鍒╃敤浜?jiǎn)閰嵕|枃浠跺拰鍙嶅皠鎶鏈潵瀹炵幇宸ュ巶妯″紡銆傚懡鍚嶇┖闂碢etShop.CacheDependencyFactory涓紝綾籇ependencyAccess鍗充負(fù)鍒涘緩IPetShopCacheDependency瀵硅薄鐨勫伐鍘傜被錛?br /> public static class DependencyAccess
{       
    public static IPetShopCacheDependency CreateCategoryDependency()
    {
        return LoadInstance("Category");
    }
    public static IPetShopCacheDependency CreateProductDependency()
    {
        return LoadInstance("Product");
    }
    public static IPetShopCacheDependency CreateItemDependency()
    {
        return LoadInstance("Item");
    }
    private static IPetShopCacheDependency LoadInstance(string className)
    {
        string path = ConfigurationManager.AppSettings["CacheDependencyAssembly"];
        string fullyQualifiedClass = path + "." + className;
        return (IPetShopCacheDependency)Assembly.Load(path).CreateInstance(fullyQualifiedClass);
    }
}
鏁翠釜宸ュ巶妯″紡鐨勫疄鐜板鍥?-3鎵紺猴細(xì)

4-3.gif
 鍥?-3 CacheDependency宸ュ巶

铏界劧DependencyAccess綾誨垱寤轟簡(jiǎn)瀹炵幇浜?jiǎn)IPetShopCacheDependency鎺ュ彛鐨勭被Category銆丳roduct銆両tem錛岀劧鑰屾垜浠箣鎵浠ュ紩鍏PetShopCacheDependency鎺ュ彛錛屽叾鐩殑灝卞湪浜庤幏寰楀垱寤轟簡(jiǎn)渚濊禆欏圭殑AggregateCacheDependency綾誨瀷鐨勫璞°傛垜浠彲浠ヨ皟鐢ㄥ璞$殑鎺ュ彛鏂規(guī)硶GetDependency()錛屽涓嬫墍紺猴細(xì)
AggregateCacheDependency dependency = DependencyAccess.CreateCategoryDependency().GetDependency();

涓轟簡(jiǎn)鏂逛究璋冪敤鑰咃紝浼間箮鎴戜滑鍙互瀵笵ependencyAccess綾昏繘琛屾敼榪涳紝灝嗗師鏈夌殑CreateCategoryDependency()鏂規(guī)硶錛屼慨鏀逛負(fù)鍒涘緩AggregateCacheDependency綾誨瀷瀵硅薄鐨勬柟娉曘?/p>

鐒惰岃繖鏍風(fēng)殑鍋氭硶鎵頒貢浜?jiǎn)浣滀负宸ュ巶绫荤殑DependencyAccess鐨勬湰韜亴璐o紝涓斿垱寤篒PetShopCacheDependency鎺ュ彛瀵硅薄鐨勮涓轟粛鐒舵湁鍙兘琚皟鐢ㄨ呰皟鐢紝鎵浠ヤ繚鐣欏師鏈夌殑DependencyAccess綾諱粛鐒舵槸鏈夊繀瑕佺殑銆?/p>

鍦≒etShop 4.0鐨勮璁′腑錛屾槸閫氳繃寮曞叆Facade妯″紡浠ユ柟渚胯皟鐢ㄨ呮洿鍔犵畝鍗曞湴鑾峰緱AggregateCacheDependency綾誨瀷瀵硅薄銆?/p>

4.3.4  寮曞叆Facade妯″紡

鍒╃敤Facade妯″紡鍙互灝嗕竴浜涘鏉傜殑閫昏緫榪涜鍖呰錛屼互鏂逛究璋冪敤鑰呭榪欎簺澶嶆潅閫昏緫鐨勮皟鐢ㄣ傚氨濂藉儚鎻愪緵涓涓粺涓鐨勯棬闈竴鑸紝灝嗗唴閮ㄧ殑瀛愮郴緇熷皝瑁呰搗鏉ワ紝緇熶竴涓轟竴涓珮灞傛鐨勬帴鍙c備竴涓吀鍨嬬殑Facade妯″紡紺烘剰鍥懼涓嬫墍紺猴細(xì)

4-4.gif
鍥?-4 Facade妯″紡

Facade妯″紡鐨勭洰鐨勫茍闈炶寮曞叆涓涓柊鐨勫姛鑳斤紝鑰屾槸鍦ㄧ幇鏈夊姛鑳界殑鍩虹涓婃彁渚涗竴涓洿楂樺眰嬈$殑鎶借薄錛屼嬌寰楄皟鐢ㄨ呭彲浠ョ洿鎺ヨ皟鐢紝鑰屼笉鐢ㄥ叧蹇?jī)鍐呴儴鐨勫疄鐜版柟寮忋備互CacheDependency宸ュ巶涓轟緥錛屾垜浠渶瑕佷負(fù)璋冪敤鑰呮彁渚涜幏寰桝ggregateCacheDependency瀵硅薄鐨勭畝渚挎柟娉曪紝鍥犺屽垱寤轟簡(jiǎn)DependencyFacade綾伙細(xì)
public static class DependencyFacade
{
    private static readonly string path = ConfigurationManager.AppSettings["CacheDependencyAssembly"];
    public static AggregateCacheDependency GetCategoryDependency()
    {
        if (!string.IsNullOrEmpty(path))
            return DependencyAccess.CreateCategoryDependency().GetDependency();
        else
            return null;
    }
    public static AggregateCacheDependency GetProductDependency()
    {
        if (!string.IsNullOrEmpty(path))
            return DependencyAccess.CreateProductDependency().GetDependency();
        else
            return null;
        }
    public static AggregateCacheDependency GetItemDependency()
    {
        if (!string.IsNullOrEmpty(path))
            return DependencyAccess.CreateItemDependency().GetDependency();
        else
            return null;
    }
}

DependencyFacade綾誨皝瑁呬簡(jiǎn)鑾峰彇AggregateCacheDependency綾誨瀷瀵硅薄鐨勯昏緫錛屽姝や竴鏉ワ紝璋冪敤鑰呭彲浠ヨ皟鐢ㄧ浉鍏蟲(chóng)柟娉曡幏寰楀垱寤虹浉鍏充緷璧栭」鐨凙ggregateCacheDependency綾誨瀷瀵硅薄錛?br /> AggregateCacheDependency dependency = DependencyFacade.GetCategoryDependency();

姣旇搗鐩存帴璋冪敤DependencyAccess綾葷殑GetDependency()鏂規(guī)硶鑰岃█錛岄櫎浜?jiǎn)鏂规硶鏇唇巰鍗曚箣澶栵紝鍚屾椂瀹冭繕瀵笴acheDependencyAssembly閰嶇疆鑺傝繘琛屼簡(jiǎn)鍒ゆ柇錛屽鏋滃叾鍊間負(fù)絀猴紝鍒欒繑鍥瀗ull瀵硅薄銆?/p>

鍦≒etShop.Web鐨凙pp_Code鏂囦歡澶逛笅錛岄潤(rùn)鎬佺被WebUtility鐨凣etCategoryName()鍜孏etProductName()鏂規(guī)硶璋冪敤浜?jiǎn)DependencyFacade綾匯備緥濡侴etCategoryName()鏂規(guī)硶錛?br /> public static string GetCategoryName(string categoryId)
{
     Category category = new Category();
     if (!enableCaching)
            return category.GetCategory(categoryId).Name;

     string cacheKey = string.Format(CATEGORY_NAME_KEY, categoryId);

     // 媯(gè)鏌ョ紦瀛樹(shù)腑鏄惁瀛樺湪璇ユ暟鎹」;
     string data = (string)HttpRuntime.Cache[cacheKey];
     if (data == null)
     {
           // 閫氳繃web.config鐨勯厤緗幏鍙杁uration鍊?
           int cacheDuration = int.Parse(ConfigurationManager.AppSettings["CategoryCacheDuration"]);
           // 濡傛灉緙撳瓨?shù)腑涓嶅瓨鍦ㄨ鏁版嵁椤瑰Q屽垯閫氳繃涓氬姟閫昏緫灞傝闂暟鎹簱鑾峰彇;
           data = category.GetCategory(categoryId).Name;
           // 閫氳繃Facade綾誨垱寤篈ggregateCacheDependency瀵硅薄;
           AggregateCacheDependency cd = DependencyFacade.GetCategoryDependency();
           // 灝嗘暟鎹」浠ュ強(qiáng)AggregateCacheDependency 瀵硅薄瀛樺偍鍒扮紦瀛樹(shù)腑;
           HttpRuntime.Cache.Add(cacheKey, data, cd, DateTime.Now.AddHours(cacheDuration), Cache.NoSlidingExpiration, CacheItemPriority.High, null);
      }
      return data;
}

GetCategoryName()鏂規(guī)硶棣栧厛浼?xì)妫鏌ョ紦瀛樹(shù)腑鏄惁宸茬粡瀛樺湪CategoryName鏁版嵁欏癸紝濡傛灉宸茬粡瀛樺湪錛屽氨閫氳繃緙撳瓨鐩存帴鑾峰彇鏁版嵁錛涘惁鍒欏皢閫氳繃涓氬姟閫昏緫灞傝皟鐢ㄦ暟鎹闂眰璁塊棶鏁版嵁搴撹幏寰桟ategoryName錛屽湪鑾峰緱浜?jiǎn)CategoryName鍚庯紝浼?xì)灏嗘柊鑾峰彇鐨勬暟鎹畼q炲悓DependencyFacade綾誨垱寤虹殑AggregateCacheDependency瀵硅薄娣誨姞鍒扮紦瀛樹(shù)腑銆?/p>

WebUtility闈?rùn)鎬佺被琚〃紺哄眰鐨勮澶氶〉闈㈡墍璋冪敤錛屼緥濡侾roduct欏甸潰錛?br /> public partial class Products : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Page.Title = WebUtility.GetCategoryName(Request.QueryString["categoryId"]);
    }
}

鏄劇ず欏甸潰title鐨勯昏緫鏄斁鍦≒age_Load浜嬩歡鏂規(guī)硶涓紝鍥犺屾瘡嬈℃墦寮璇ラ〉闈㈤兘瑕佹墽琛岃幏鍙朇ategoryName鐨勬柟娉曘傚鏋滄病鏈夐噰鐢ㄧ紦瀛樻満鍒訛紝褰揅ategory鏁版嵁杈冨鏃訛紝欏甸潰鐨勬樉紺哄氨浼?xì)闈炲父缂撴參銆?/p>

4.3.5  寮曞叆Proxy妯″紡

涓氬姟閫昏緫灞侭LL涓笌Product銆丆ategory銆両tem鏈夊叧鐨勪笟鍔℃柟娉曪紝鍏跺疄鐜伴昏緫鏄皟鐢ㄦ暟鎹闂眰錛圖AL錛夊璞¤闂暟鎹簱錛屼互鑾峰彇鐩稿叧鏁版嵁銆備負(fù)浜?jiǎn)鏀瑰杽绯痪l熸ц兘錛屾垜浠氨闇瑕佷負(fù)榪欎簺瀹炵幇鏂規(guī)硶澧炲姞緙撳瓨鏈哄埗鐨勯昏緫銆傚綋鎴戜滑鎿嶄綔澧炲姞浜?jiǎn)缂撳瓨鏈哄埗鐨勪笟鍔″璞℃椨灱屽浜庤皟鐢ㄨ呰岃█錛屽簲涓嶣LL涓氬姟瀵硅薄鐨勮皟鐢ㄤ繚鎸佷竴鑷淬備篃鍗蟲(chóng)槸璇達(dá)紝鎴戜滑闇瑕佸紩鍏ヤ竴涓柊鐨勫璞″幓鎺у埗鍘熸潵鐨凚LL涓氬姟瀵硅薄錛岃繖涓柊鐨勫璞″氨鏄疨roxy妯″紡涓殑浠g悊瀵硅薄銆?/p>

浠etShop.BLL.Product涓氬姟瀵硅薄涓轟緥錛孭etShop涓哄叾寤虹珛浜?jiǎn)浠g悊瀵硅薄ProductDataProxy錛屽茍鍦℅etProductByCategory()絳夋柟娉曚腑錛屽紩鍏ヤ簡(jiǎn)緙撳瓨鏈哄埗錛屼緥濡傦細(xì)
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;
    }
}

涓庝笟鍔¢昏緫灞侾roduct瀵硅薄鐨凣etProductsByCategory()鏂規(guī)硶鐩告瘮錛屽鍔犱簡(jiǎn)緙撳瓨鏈哄埗銆傚綋緙撳瓨鍐呬笉瀛樺湪鐩稿叧鏁版嵁欏規(guī)椂錛屽垯鐩存帴璋冪敤涓氬姟閫昏緫灞侾roduct鐨凣etProductsByCategory()鏂規(guī)硶鏉ヨ幏鍙栨暟鎹紝騫跺皢鍏朵笌瀵瑰簲鐨凙ggregateCacheDependency瀵硅薄涓璧峰瓨鍌ㄥ湪緙撳瓨?shù)腑銆?/p>

寮曞叆Proxy妯″紡錛屽疄鐜頒簡(jiǎn)鍦ㄧ紦瀛樼駭鍒笂瀵逛笟鍔″璞$殑灝佽錛屽寮轟簡(jiǎn)瀵逛笟鍔″璞$殑鎺у埗銆傜敱浜庢毚闇插湪瀵硅薄澶栫殑鏂規(guī)硶鏄竴鑷寸殑錛屽洜鑰屽浜庤皟鐢ㄦ柟鑰岃█錛岃皟鐢ㄤ唬鐞嗗璞′笌鐪熷疄瀵硅薄騫舵病鏈夊疄璐ㄧ殑鍖哄埆銆?/p>

浠庤亴璐e垎紱諱笌鍒嗗眰璁捐鐨勮搴﹀垎鏋愶紝鎴戞洿甯屾湜榪欎簺Proxy瀵硅薄鏄瀹氫箟鍦ㄤ笟鍔¢昏緫灞備腑錛岃屼笉鍍忓湪PetShop鐨勮璁¢偅鏍鳳紝琚垝鍒嗗埌琛ㄧず灞俇I涓傛澶栵紝濡傛灉闇瑕佽冭檻紼嬪簭鐨勫彲鎵╁睍鎬т笌鍙浛鎹㈡э紝鎴戜滑榪樺彲浠ヤ負(fù)鐪熷疄瀵硅薄涓庝唬鐞嗗璞″緩绔嬬粺涓鐨勬帴鍙f垨鎶借薄綾匯傜劧鑰岋紝鍗曚互PetShop鐨勮〃紺哄眰璋冪敤鏉ョ湅錛岄噰鐢ㄩ潤(rùn)鎬佺被涓庨潤(rùn)鎬佹柟娉曠殑鏂瑰紡錛屾垨璁告洿涓哄悎鐞嗐傛垜浠渶瑕佽皚璁幫紝“榪囧害璁捐”鏄蔣浠惰璁$殑璀︽垝綰褲?/p>

濡傛灉闇瑕佸UI灞傞噰鐢ㄧ紦瀛樻満鍒訛紝灝嗗簲鐢ㄧ▼搴忔暟鎹瓨鏀懼埌緙撳瓨?shù)腑锛尀鍙互璋冪敤杩欎簺浠g悊瀵硅薄銆備互ProductsControl鐢ㄦ埛鎺т歡涓轟緥錛岃皟鐢ㄦ柟寮忓涓嬶細(xì)
productsList.DataSource = ProductDataProxy.GetProductsByCategory(categoryKey);

productsList瀵硅薄灞炰簬鑷畾涔夌殑CustomList綾誨瀷錛岃繖鏄竴涓淳鐢熻嚜System.Web.UI.WebControls.DataList鎺т歡鐨勭被錛屽畠鐨凞ataSource灞炴у彲浠ユ帴鍙桰List闆嗗悎瀵硅薄銆?br /> 涓嶈繃鍦≒etShop 4.0鐨勮璁′腑錛屽浜庣被浼間簬ProductsControl綾誨瀷鐨勬帶浠惰岃█錛岄噰鐢ㄧ殑緙撳瓨鏈哄埗鏄〉杈撳嚭緙撳瓨銆傛垜浠彲浠ヤ粠ProductsControl.ascx欏甸潰鐨凷ource浠g爜涓彂鐜扮鍊細(xì)
<%@ OutputCache Duration="100000" VaryByParam="page;categoryId" %>

涓嶢SP.NET 1.x鐨勯〉杈撳嚭緙撳瓨?shù)笉鍚岀殑鏄Q屽湪ASP.NET 2.0涓紝涓篈SP.NET鐢ㄦ埛鎺т歡鏂板紩鍏ヤ簡(jiǎn)CachePolicy灞炴э紝璇ュ睘鎬х殑綾誨瀷涓篊ontrolCachePolicy綾伙紝瀹冧互緙栫▼鏂瑰紡瀹炵幇浜?jiǎn)瀵笰SP.NET鐢ㄦ埛鎺т歡鐨勮緭鍑虹紦瀛樿緗傛垜浠彲浠ラ氳繃璁劇疆ControlCachePolicy綾葷殑Dependency灞炴э紝鏉ヨ緗笌璇ョ敤鎴鋒帶浠剁浉鍏崇殑渚濊禆欏癸紝渚嬪鍦≒roductsControl鐢ㄦ埛鎺т歡涓紝榪涜濡備笅鐨勮緗細(xì)
protected void Page_Load(object sender, EventArgs e)
{
    this.CachePolicy.Dependency = DependencyFacade.GetProductDependency();
}

閲囩敤欏佃緭鍑虹紦瀛橈紝騫朵笖鍒╃敤ControlCachePolicy璁劇疆杈撳嚭緙撳瓨錛岃兘澶熷皢涓氬姟鏁版嵁涓庢暣涓〉闈㈡斁鍏ュ埌緙撳瓨?shù)腑銆傝繖縐嶆柟寮忔瘮璧峰簲鐢ㄧ▼搴忕紦瀛樿岃█錛屽湪鎬ц兘涓婃湁寰堝ぇ鐨勬彁楂樸傚悓鏃訛紝瀹冨張閫氳繃寮曞叆鐨凷qlCacheDependency鐗規(guī)ф湁鏁堝湴閬垮厤浜?#8220;鏁版嵁榪囨湡”鐨勭己鐐癸紝鍥犺屽湪PetShop 4.0涓騫挎硾閲囩敤銆傜浉鍙嶏紝涔嬪墠涓篜roduct銆丆ategory銆両tem涓氬姟瀵硅薄寤虹珛鐨勪唬鐞嗗璞″垯琚?#8220;鎶曢棽鏁g疆”錛屼粎浠呬綔涓轟竴縐嶈璁℃柟娉曠殑灞曠ず鑰?#8220;騫稿瓨”涓庢暣涓郴緇熺殑婧愪唬鐮佷腑銆?/p>

椋庨洦鍏肩▼ 2007-12-26 12:07 鍙戣〃璇勮
]]>
IList<CategoryInfo> GetCategories();鐨勯棶棰?/title><link>http://www.tkk7.com/ljy032/archive/2007/12/26/170538.html</link><dc:creator>椋庨洦鍏肩▼</dc:creator><author>椋庨洦鍏肩▼</author><pubDate>Wed, 26 Dec 2007 03:44:00 GMT</pubDate><guid>http://www.tkk7.com/ljy032/archive/2007/12/26/170538.html</guid><wfw:comment>http://www.tkk7.com/ljy032/comments/170538.html</wfw:comment><comments>http://www.tkk7.com/ljy032/archive/2007/12/26/170538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/ljy032/comments/commentRss/170538.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/ljy032/services/trackbacks/170538.html</trackback:ping><description><![CDATA[petshop4.0涓殑涓孌典唬鐮?  <br />     <br />   public   interface   ICategory   {   <br />     <br />   ///   <summary>   <br />   ///   Method   to   get   all   categories   <br />   ///   </summary>   <br />                   ///   <returns>Interface   to   Model   Collection   Generic   of   categories</returns>   <br />               <br />                   <br />   IList<CategoryInfo>   GetCategories();   <br />                   <br />     <br />                   ///   <summary>   <br />                   ///   Get   information   on   a   specific   category   <br />                   ///   </summary>   <br />                   ///   <param   name="categoryId">Unique   identifier   for   a   category</param>   <br />                   ///   <returns>Business   Entity   representing   an   category</returns>   <br />                   CategoryInfo   GetCategory(string   categoryId);   <br />   }   <br />     <br />     <br />   鎴戠煡閬揑List<CategoryInfo>鏄寖鍨?  <br />   琛ㄧずlist涓殑item鏄疌ategoryInfo瀵硅薄   <br />     <br />     <br />   璇烽棶涓轟粈涔堢敤IList<CategoryInfo>   <br />   鐢↙ist<CategoryInfo>鍙互鍚楋紵   <br />     <br />   涓よ呮湁浠涔堝尯鍒紵璋㈣阿   <br /> <br /> 娌℃湁浠涔堝尯鍒紝榪欐牱鍐欑伒媧繪уぇ錛屽疄鐜癷list鎺ュ彛鐨勭被寰堝錛屼綘鍐欐垚list鍚庯紝涔熻浠ュ悗浣犺鏀規(guī)垚闈瀕ist鐨勶紝灝變細(xì)瑕佹敼寰堝浠g爜<br /> 涓句釜渚嬪瓙   <br />     <br />   RenderControlToString(DataList   L//Control   C)   <br />     <br />   浣犺涓烘槸鍐檆ontrol榪樻槸鍐檇atalist浠g爜鐨勯氱敤鎬ч珮?<br /> <br />   OOP緙栫爜鍘熷垯:灝藉彲鑳界敤鎺ュ彛緙栫▼<br /> <img src ="http://www.tkk7.com/ljy032/aggbug/170538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/ljy032/" target="_blank">椋庨洦鍏肩▼</a> 2007-12-26 11:44 <a href="http://www.tkk7.com/ljy032/archive/2007/12/26/170538.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍏充簬sqlhelper.cs http://www.tkk7.com/ljy032/archive/2007/12/26/170508.html椋庨洦鍏肩▼椋庨洦鍏肩▼Wed, 26 Dec 2007 02:30:00 GMThttp://www.tkk7.com/ljy032/archive/2007/12/26/170508.htmlhttp://www.tkk7.com/ljy032/comments/170508.htmlhttp://www.tkk7.com/ljy032/archive/2007/12/26/170508.html#Feedback0http://www.tkk7.com/ljy032/comments/commentRss/170508.htmlhttp://www.tkk7.com/ljy032/services/trackbacks/170508.htmlpublic abstract class SqlHelper
          {
              public static readonly string connectionString = ConfigurationManager.ConnectionStrings["SqlConnString"].ConnectionString;
        
              SqlConnection conn;

              #region open SqlConnection
              public static void Open() {
                   conn = new SqlConnection(connectionString);
                   if (conn.State != ConnectionState.Open)
                      conn.Open();
              }    
              #endregion

              #region close SqlConnection
              public static void Close() {
                  if (conn != null)
                  {
                      conn.Close();
                      conn.Dispose();
                  }
              }        
              #endregion

              #region prepare SqlCommand
              private static void PrepareCommand(SqlCommand cmd, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) {
                  Open();
                  cmd.Connection = conn;
                  cmd.CommandType = cmdType;
                  cmd.CommandText = cmdText;

                  if (cmdParms != null)
                  {
                      foreach (SqlParameter parm in cmdParms)
                          cmd.Parameters.Add(parm);
                  }
              }
              #endregion

              #region parm cache
              /*
               浣跨敤涓涓搱甯岃〃鏉ヤ繚瀛樼紦瀛樼殑鍙傛暟 鍙紦瀛樺弬鏁板悕
               鍝堝笇琛ㄧ殑鐗圭偣:涓涓敭瀵瑰簲涓涓糼ey瀵箆alue(涓簅bject闇瑕佺被鍨嬭漿鍖?        涓嶈兘鍑虹幇涓や釜鐩稿悓鐨勯敭 鍚﹀垯error
         
               涓嬮潰鐨勫搱甯岃〃parmCache瀹氫箟涓簊tatic鍗充竴嬈″畾涔夊叏灞浣跨敤
               鎵浠ュ彲鑳戒細(xì)鍑虹幇鏈変漢鍦ㄨ鐨勬椂鍊欙紝鏈変漢鍦ㄥ啓錛屼竴鑸細(xì)鐢↙ock灝卞儚Asp涓敤Application["count"]鏉ョ粺璁$偣鍑?yán)L暟涓鏍?br />                瑕佸厛閿佸悗瑙i攣
               浣?net妗嗘灦鎻愪緵浜?jiǎn)Synchroized          sync鍜宻yncroize涓枃鎰忔?鍚屾錛屽悓鏃跺彂鐢?br />                鏉ユ彁渚涜繖涓鎿嶄綔
              */
              private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());

              public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters) {
                  parmCache[cacheKey] = commandParameters;
              }

              /*
              1銆佷負(fù)浣曡鍏嬮殕鍛?涓轟綍涓嶇洿鎺eturn cachedParms
         
              鏈変竴涓弬鏁版暟緇?br />               SqlParameter[] parms={
              new SqlParameter("@num1",SqlDbType.Int,4),
              new SqlParameter("@num2",SqlDbType.Int,4)
              }
              緙撳瓨璇ユ暟緇?br />               鐢ㄦ埛a鍜宐閮芥墽琛屾彃鍏ユ搷浣?br />               a鐢ㄦ埛鎻掑叆浜?,1
              b鐢ㄦ埛鎻掑叆浜?,2
              濡傛灉涓嶇敤鍏嬮殕鐨勮瘽錛屽弬鏁版暟緇勫彧鏈変竴浠?br />               鑰?涓敤鎴烽渶瑕佹牴鎹笉鍚岀殑鎯呭喌璧嬩簬涓嶅悓鐨勫?br />               鎵浠ュ氨鐢ㄤ簡(jiǎn)鍏嬮殕浜?br />         
              2銆?ICloneable)cachedParms[i]鍏堝皢HashTable杞負(fù)ICloneable榪欐牱HashTable灝卞叿鏈変簡(jiǎn)Clone()鍏嬮殕鏂規(guī)硶浜?br />               鍏嬮殕涓浠藉悗鏄粈涔堢被鍨嬪憿錛岋紝褰撶劧瑕佸己鍒惰漿鍖栦負(fù)(SqlParameter)浜?br />               鏈鍚庡皢瀹冭祴鍊肩粰clonedParms[i]
              */       
              public static SqlParameter[] GetCachedParameters(string cacheKey) {
                  SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];

                  if (cachedParms == null)
                      return null;
                  SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];

                  for (int i = 0; i < cachedParms.Length; i++)
                      clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();

                  return clonedParms;
              }
              #endregion        
        
              //below method support sqltext and procedure

              #region ExecuteReader
              /*
               parms鐨勪綔鐢紝榪欎篃鏄竴涓煡璇嗙偣
               涓句緥:
               ExecuteReader(*,*,null)鎴愬姛榪愯
               ExecuteReader(*,*,new SqlParameter(*))鎴愬姛榪愯
               ExecuteReader(*,*,new SqlParameter(*),new SqlParameter(*))鎴愬姛榪愯
               ExecuteReader(*,*,{new SqlParameter(*),new SqlParameter(*),})鎴愬姛榪愯
               瀹冭鍙傛暟綾誨瀷鍜屽弬鏁頒釜鏁頒換鎰?br />                榪欏彲緇欎簡(jiǎn)涓嶆槸涓鑸殑濂藉錛屼綘涓嶅繀涓篠qlParameter鍜孲qlParameter[]榪涜閲嶈澆錛屽啓涓婁袱涓嚱鏁?br />                鍙堜負(fù)null鍐欎笂涓涓嚱鏁幫紝鍥犱負(fù)null浼?xì)涓嶆槑纭皟鐢⊿qlParameter鐨勫嚱鏁拌繕鏄疭qlParameter[]鐨勫嚱鏁?br />                鍟ヤ綘涓嶇煡閬撴垜鍦ㄨ浠涔堬紝鎵撳眮灞?閭e洖鍘葷湅鐪媍++鐨勫嚱鏁伴噸杞?br />                */
              public static SqlDataReader ExecuteReader(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {
            
                  SqlCommand cmd = new SqlCommand();

                  try {
                      PrepareCommand(cmd, null, cmdType, cmdText, commandParameters);
                      SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                      cmd.Parameters.Clear();
                      return rdr;
                  }
                  catch {
                      Close();
                      throw;
                  }
              }
              #endregion

              #region ExecuteNonQuery
              public static void ExecuteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {

                  SqlCommand cmd = new SqlCommand();

                  PrepareCommand(cmd, cmdType, cmdText, commandParameters);
                  cmd.ExecuteNonQuery();
                  cmd.Parameters.Clear();

                  Close();
              }
              #endregion

              #region ExecuteScalar
              public static object ExecuteScalar(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {

                  SqlCommand cmd = new SqlCommand();

                  PrepareCommand(cmd, cmdType, cmdText, commandParameters);
                  object val = cmd.ExecuteScalar();
                  cmd.Parameters.Clear();

                  Close();
                  return val;
              }
              #endregion


          }
}



椋庨洦鍏肩▼ 2007-12-26 10:30 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 国产精品亚洲小说专区| 亚洲国产区男人本色| 免费看黄的成人APP| 国产亚洲综合成人91精品| 中文字幕版免费电影网站| 亚洲人成色7777在线观看| 久久精品无码专区免费| 亚洲级αV无码毛片久久精品| 中文字幕免费在线视频| 亚洲av色福利天堂| 最近中文字幕完整版免费高清| 亚洲日本乱码一区二区在线二产线| 亚欧人成精品免费观看| 亚洲kkk4444在线观看| 精品国产一区二区三区免费看| 亚洲男同gay片| 亚洲国产人成中文幕一级二级| 成人免费av一区二区三区| 国产成人高清亚洲| 最近免费中文字幕mv电影| 亚洲综合久久一本伊伊区| 日韩免费电影在线观看| 一级毛片一级毛片免费毛片| 国产亚洲精品美女久久久| xxxx日本免费| 337P日本欧洲亚洲大胆艺术图| 久久伊人亚洲AV无码网站| 1区2区3区产品乱码免费| 久久亚洲精品无码gv| 亚洲人成网站在线观看播放| 亚洲免费黄色网址| 美女视频黄频a免费| 亚洲欧洲免费视频| 国产美女无遮挡免费视频网站| 一个人看的免费高清视频日本| 亚洲一区中文字幕久久| 精品剧情v国产在免费线观看| 亚洲免费观看视频| 亚洲a∨国产av综合av下载 | 亚洲精品在线免费观看| 日韩免费无码一区二区视频|