中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

緩存篇(Cache)~第一回 使用static靜態(tai)成員實現服(fu)務器端(duan)緩存(導(dao)航面包屑)

返回目錄

今(jin)天(tian)寫(xie)緩存篇(pian)的第一篇(pian)文章(zhang),在寫(xie)完目錄(lu)后,得到了一些朋友的關(guan)注,這給我之后的寫(xie)作(zuo)帶來了無窮的力量,在這里,感謝那幾位伙伴(ban),哈哈!

書歸正傳(chuan),今天我(wo)帶(dai)來一(yi)(yi)(yi)個Static靜態成(cheng)員的緩(huan)(huan)存(cun),其實它(ta)(ta)也(ye)不(bu)是什(shen)么緩(huan)(huan)存(cun),就是C#語(yu)言里(li)的一(yi)(yi)(yi)個特(te)性,靜態成(cheng)員在(zai)(zai)被(bei)初始(shi)化(hua)后(hou)它(ta)(ta)將不(bu)會(hui)再被(bei)執(zhi)(zhi)行,即,他里(li)面的內容(rong)只會(hui)被(bei)執(zhi)(zhi)行一(yi)(yi)(yi)次(ci),直到你(ni)的網(wang)站被(bei)重啟后(hou)(只考慮在(zai)(zai)單線程(cheng)情況下)。相(xiang)信(xin)大家都在(zai)(zai)做網(wang)站時,遇(yu)到了網(wang)站導航面包屑功(gong)能(neng)點吧,一(yi)(yi)(yi)般,我(wo)們把它(ta)(ta)寫死在(zai)(zai)頁面上,這種作(zuo)法沒有(you)任(ren)何可擴展(zhan)性和(he)可維(wei)護性,所以,今天我(wo)們要(yao)改善一(yi)(yi)(yi)下這個功(gong)能(neng)點,使(shi)用的技(ji)術就是靜態成(cheng)員緩(huan)(huan)存(cun)和(he)樹型結構。

先看一下導航的結構

   /// <summary>
    /// 導航(hang)面包
    /// </summary>
    public class BannerBread
    {
        public string DisplayTitle { get; set; }
        public string Url { get; set; }
        public int ID { get; set; }
        public int ParentID { get; set; }
        public BannerBread Parent { get; set; }
    }

下面這(zhe)段(duan)代碼就是實現導(dao)航的(de)核心,它對外提(ti)供一(yi)(yi)(yi)(yi)個唯(wei)一(yi)(yi)(yi)(yi)的(de)訪問點,所以(yi),和兩個公開的(de)方(fang)法(fa),一(yi)(yi)(yi)(yi)個是GetBanner,用來返回(hui)(hui)當(dang)前URL對應的(de)導(dao)航完整(zheng)對象(xiang)(包括祖宗(zong)對象(xiang)),GenerateStandardBanner方(fang)法(fa)返回(hui)(hui)一(yi)(yi)(yi)(yi)個標準的(de)導(dao)航,當(dang)前,具(ju)體的(de)項目,你可以(yi)自己(ji)

去實現它。

    /// <summary>
    /// 導(dao)航生產(chan)類
    /// </summary>
    public static class BannerBreadFactory
    {
        /// <summary>
        /// BannerBread單例實例對象
        /// </summary>
        static readonly List<BannerBread> Instance = new List<BannerBread>();

        static BannerBreadFactory()
        {
            Instance.Add(new BannerBread { ID = 1, DisplayTitle = "首頁", Parent = null, ParentID = 0, Url = "/" });
            Instance.Add(new BannerBread { ID = 2, DisplayTitle = "關于(yu)我們", Parent = null, ParentID = 1, Url = "/Home/About" });
            Instance.Add(new BannerBread { ID = 3, DisplayTitle = "聯系我們", Parent = null, ParentID = 1, Url = "/Home/Contact" });
        }
        /// <summary>
        /// 得到當前(qian)URL的祖宗(zong)節點
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static BannerBread GetBanner(string url)
        {
            var entity = Instance.FirstOrDefault(i => i.Url.ToUpper() == url.ToUpper());
            GetFather(entity);
            return entity;
        }
        /// <summary>
        /// 標準的(de)導(dao)航,程序開(kai)發人員(yuan)可以根(gen)據自己的(de)需要,在具體項目中去定義它(ta)
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string GenerateStandardBanner(string url)
        {
            var entity = GetBanner(url);
            StringBuilder str = new StringBuilder();
            while (entity != null)
            {
                str.Insert(0, "/<span><a href='" + entity.Url + "'>" + entity.DisplayTitle + "</a></span>");
                entity = entity.Parent;
            }
            return str.ToString().StartsWith("/") ? str.ToString().Substring(1) : "未找到(dao)導航(hang)項";
        }
        /// <summary>
        /// 得到祖宗
        /// </summary>
        /// <param name="son"></param>
        private static void GetFather(BannerBread son)
        {
            if (son != null)
            {
                son.Parent = Instance.FirstOrDefault(i => i.ID == son.ParentID);
                GetFather(son.Parent);
            }
        }

    }

上(shang)面的(de)代碼中(zhong),對于(yu)導(dao)航數(shu)(shu)據(ju)的(de)部分,我(wo)選(xuan)擇了(le)靜(jing)態(tai)數(shu)(shu)據(ju),當(dang)然,真實的(de)項目中(zhong),需要將這塊(kuai)放到數(shu)(shu)據(ju)庫里,以便(bian)(bian)于(yu)后(hou)期維護,一般地(di),我(wo)們可以在(zai)布局頁(ye)去(qu)調(diao)用(yong)它來(lai)實現導(dao)航顯示的(de)功能,非常方(fang)便(bian)(bian),下面是(shi)運行后(hou)的(de)效果截圖

 對(dui)于具體的(de)顯示(shi),我們的(de)前(qian)臺顯示(shi)可以自己去組裝,上面顯示(shi)的(de)只是一種(zhong)標(biao)準的(de)形式,即由GenerateStandardBanner方(fang)法(fa)提供的(de)形式。

返回目錄

posted @ 2014-10-08 13:22  張占嶺  閱讀(5485)  評論(1)    收藏  舉報