返回目录

今天写缓存篇的第一篇文章,在写完目录后,得到了一些朋友的关注,这给我之后的写作带来了无穷的力量,在这里,感谢那几位伙伴,哈哈!

书归正传,今天我带来一个Static静态成员的缓存,其实它也不是什么缓存,就是C#语言里的一个特性,静态成员在被初始化后它将不会再被执行,即,他里面的内容只会被执行一次,直到你的网站被重启后(只考虑在单线程情况下)。相信大家都在做网站时,遇到了网站导航面包屑功能点吧,一般,我们把它写死在页面上,这种作法没有任何可扩展性和可维护性,所以,今天我们要改善一下这个功能点,使用的技术就是静态成员缓存和树型结构。

先看一下导航的结构

   /// <summary>
/// 导航面包
/// </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; }
}

下面这段代码就是实现导航的核心,它对外提供一个唯一的访问点,所以,和两个公开的方法,一个是GetBanner,用来返回当前URL对应的导航完整对象(包括祖宗对象),GenerateStandardBanner方法返回一个标准的导航,当前,具体的项目,你可以自己

去实现它。

    /// <summary>
/// 导航生产类
/// </summary>
public static class BannerBreadFactory
{
/// <summary>
/// BannerBread单例实例对象
/// </summary>
static readonly List<BannerBread> Instance = new List<BannerBread>(); static BannerBreadFactory()
{
Instance.Add(new BannerBread { ID = , DisplayTitle = "首页", Parent = null, ParentID = , Url = "/" });
Instance.Add(new BannerBread { ID = , DisplayTitle = "关于我们", Parent = null, ParentID = , Url = "/Home/About" });
Instance.Add(new BannerBread { ID = , DisplayTitle = "联系我们", Parent = null, ParentID = , Url = "/Home/Contact" });
}
/// <summary>
/// 得到当前URL的祖宗节点
/// </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>
/// 标准的导航,程序开发人员可以根据自己的需要,在具体项目中去定义它
/// </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(, "/<span><a href='" + entity.Url + "'>" + entity.DisplayTitle + "</a></span>");
entity = entity.Parent;
}
return str.ToString().StartsWith("/") ? str.ToString().Substring() : "未找到导航项";
}
/// <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);
}
} }

上面的代码中,对于导航数据的部分,我选择了静态数据,当然,真实的项目中,需要将这块放到数据库里,以便于后期维护,一般地,我们可以在布局页去调用它来实现导航显示的功能,非常方便,下面是运行后的效果截图

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABEwAAABxCAIAAABAyKGNAAAQ+UlEQVR4nO3dOXIbRxsGYB7Ap/l1DfoyTJzzFioGTpAzZzlg8Qxw8QBMVDTKBCVIhkSV8AfYZunu6Rlsg+Hz1JcYHMwKV/WrXuZiAQAAMCAXpz4BAACAfRJyAACAQRFyAACAQRFyAACAQRFyAACAQRFyAID3ZDz69Nvv0/ExDjW/ufz02++fru7fjnE0YEvIAQDegef7ycXlp6v7t8Xj9OLy081j4W+P04vLT7/9Xv4wsoeL0bzw2dvddeKLq5Aj58DRCTkAwFAsc8gyV8TqajS9KmaVyexq+5XJ3SS+93UWCu82EGNWIaeci4AjEHIAgKErhp+L6+nN9SbPrHPI9ey5cS+1Dp/NbtM9OecWcuY3l8mw995M3pp/G7t/pZuDHej5fnLm3Y9CDgAwcKtBZZuOmtXQtdH06rLSezO/uYwPLauFnPEoHZD2GXI6NTrnN9XxdXkms6vLvOC3T/NxcrhgrsfpReIhLhaLxeL5fhaflLX8tVR/FW3mcdX3sG+T2dVovlgsxqPyWU1mV6mA+nZ3XbmK+c1l+LpWgzOP/RvYIyEHABiMdQ4ptuw3/S2Fhm+4A2cZWqKxpBpyVjuJz+QJhZzHabe2Y85IvEh1aW2HJiAdVOpmjkdtriJrhlUi/r3dXX+6GM3Gj6Vfy9X9LDeDLR9xaQ/dzqQylrJaF6P54nFa/1XH89gm7VcqsP3z/eQikn/OhJADAAzKpqmXGpBWb8SXU0SoSV1pPRfjSrIxGm6htsw5z/eTi/A/0r/dXUc6Liazq8uG1RTi5jctwlis9dyl6ie8fjSbNne9R6IgoydnsUj0Vi1DTjF1JPv3quqhJevmtOimW5756hDzm9UlZPXajUelbcaj+CN+nAo5AAB9sunPuZ7djWKhpdR10DS7prTb5TbLbp9t23Qyu6o2CuPD1drHj8OFnPEo3EnyfD+tf/58P9nnEKbHaeSiagetbJa4tMyQs36CtZ3sEnLe7q73O8Rrk2G2Kv1az/eTm8fqqLPY4MZyyIn/chZCDgBA72zXbo51DiwW1dXSmodmlUJOzjyNPc/JOVDI6TAQbm/D2DqHnOKa4IF95mWS8NHTISc6iWWx9wS4NJldXVaydPnq6uk6NGhzqRRyArG8spPiX1v17PWBkAMADNK6qRf7J+3Wg4WKIafe1gzY6+pq0Tywl5CTO+Nlz69S3SHkRKfx5Iec8ld2HWr4OK2OftxTFCzEuXBP0XhUTUGxQxdDTrG3JyPoTseL7YIH50DIAQCGZz1J5uJ6kpwtM7m6LjfjEoohJ6sl/T5DzvwufFtCfSA7hZzICmD1l722kzFcbTIfV06mnHA2j35PqzCvTiC+GMD85nKTvVNPpxBykvOaFoarAQD0zTrhNDUxV83Z5iUHlspzcqLDpbaiIWf53XYN8fMJOTfJVFk60G4hJ9xrcYSQU//Kfekc2j/f+U06CU/enqP3an5zPXvOW/V7G3Ims5v0/x1CDgBAj2StIFwTWh6t2q6t7nm1ala7JaRLQ4PaLO7cckhVw3yk6vnsOeQEIkEwce0YcoLdEdkhJzI7f8fV1RoGjMW2b8jk64uKjStbLid90TRPTMgBADg/tbWGc2ybsJUWZHAcVCk2tF85OjzVIffSzqYn51ghJ7Zx1lITkelYO4ac0rSZytSv9Ayf6CtKc+7S43w1Z2Z9gbE3DgXn5EQOWnvQk9nV2aw9IOQAAENQmQXR+s0tza3YUB/RshUbGSa099XVgulCyOm2cey+7RRyVr+HhifeYocdXspZTlalW1F/T87V/bzt/ylHfEXsLoQcAODs1Rd0XoWcnFkK4X6buuBAuNTouDMKOXvsfTpxyMle/61ryHmcJl+guVrKInnbc0NOYdm0pkk7i+Ud3tylt7vrwDlUQk75K2WJ4WrLXqO+E3IAgAFqG3IymsXJkHN1P7u5rPzDeSDkdF5Z+MAhJ7evoPc9Ocvn3irkpFdKaBhjVr7Ayd1kMR41/uoyQk71duWeZPrQ1ZAT+mTFnBwAgP45dsi5GE03zdDCiyNDIecyr+MocJ4HCTkZjfJWjhdyQvdkfpM76X+34WqTt/Idm9+sz3A/ISf3bAsyYkk90mwi7vi+PgNNyAEA6JcDhpxid81mtNu6J6fYiEyFnLav1MyZwh6sppBTb9Pv6CghJ5bfWrwJNBYb1u+cKX/StFb49mmeYchZdUCVZqZV97b8H6rNeoAnJuQAAAN00JATnKZSjzSJkNO2sRh+1f3mTzv05HRocDfvMDdxdQo5iSFz41H+vY3ct0BUaLhF41Fp+56HnPL/FNvJbNXTru1tPPp0MZqNH/f4UzkoIQcAGKC2q6u1HK5WWjx62ao+aMhJNIt3Czl5MaONQ/bkPE4vEq+8XD+UXYarheaotMskhwk5mXNy8npyykufL88kL+ScxbpqS0IOADBA89oyAMFtJlf5g7VKc3Lqcz8OGXJScWWnkLPvCTmLZMgJvrgzM+SsJ9ZHH1ZhPFXWbkP3LdwZ0peQk9GT03DVhaCy+nFufh5CDgDAeahOM6jYrBmQ2cpPrRa9OGjISS6AtkPImcyu9jxWbdGuBZ+dRpoSzupZF5vsqUe/3m1pg+h6yn0IOYvF4u05fqPGo+YVJhbJoCLkAACci037OJAQilP5cxqIJww5yfZlvMXcFHIO0I3TUpuenMaEU74Jq0cfyxLrB7H5YZQWDyjrSchJTEaqvAk3eW5CDgDA2duuFhCYTZ49f6O0q6OHnO3yxLHjdgk5eQtMH1b2jKDqAsdb8XGJq+dVTwXFBeWWd28WTziL/oSc6BJnj9OLvEe5a8g5bSRuR8gBAIZsO9ip2ApcdQ60arSlQ05g1vt+Qk7T+0Ojb4ZZHqv1TJ7DKnaw5MybSlmtFZYzS2djMruqPveGPp8OZ9Xwu2qxznX4u+VLfru7zgyrqeXChRwAgHMSyjPblXODG4ebvMmQU5wcn1H5LfvEMKrttWxbrtV1rsMHagpOh7ZdK6xbuzljys1isVgsHqeZzz25Pni4YrkiFAYCa/117UOrdes9TmOvNK1daTzklNdbW0fH6pJuQg4AwBG1b6HmVOi1icnmaXABsbLmndS2b3zRzV2orZ+ax/I47cPkisArPhs23j0hLNLT9+sHahVvlpI9HuvXNzXd/5aZOf4brvVZdX7049FJuv46E3IAADIklzg7kLcDvHtxftODhDNcb3f3bm8fCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAMCgCDkAAPTQ08PH2/Fr6aPX8W3ts3P09PCxy3W8jm8/dvpi+8Oc/V0WcgAAhmvZLv748eGpYcOnh49tNO7vEKe+/qRjE3x5icduvj89fLwdPy3PfHUp63udcSqbS25x93e8Tevv3z483DYfrK+EHACAYcsOOuHv1ZvKTw/Havqu4sDyFF7HjY3udFRbhY0DxpzY8Tcx53b8utoodBmRr3e416s9dXpKy/v88LTo/tM5PSEHAGDoujV5nx5O0PEROoflSRTa3rmONL6rbJthXouRanMuTw95l7H69rjb0LbI/nL2VbprpZh5RoQcAID3Zt1jEGhqb5vg1YkjpxntVTp8OTA0R4U+hZziKT08NfVK1c88kjbaDDOs9GS1HKF4XjlHyAEAGJLMpuvDU3j2e+Hrt7eh+SCHbuvueP4lvQg5q6kt2RewTnCFP62v4ylrSYCdrzownu51fHteY9aEHACAgWvT6i02cMvfO93otfgklgahCz/4ZVRSWq03Jn3s+Kye7DPeOeScJBvumZADADBwu4Wc9TdPHHLSRw6vQpZysCtJDFdreQuLAwRbLPYQy0nNX1+NVcxY4aH3hBwAgIHbMeQUFz7uTcjJWkuhF8PVIiEneW6bnLK9vm10aQgftblTgfFvpc9Lye9pfPvx4eG006/2QcgBABi4Uns61uRdOe1wtTYdMstJLckm/wlDTrPQgta515+46NiSBa3uU+cBgr0h5AAADExTU3nVvA62YYvN23JT91Q9Oav+kPgpN3z1JCFnu+h1YIW0xGUU1o3edgYVt2+KH4FLbn5wtS+d/4A1IQcAYOA6DlerjHs6TcjZtvLP6j05hTf7fNzcxeVfbjPeR/pUDjm3t7kBL7IwWsO36/fp7FOOkAMAMHDd2vqVYVcnae+WG+it39TTj+FqpfF+62n9qdtZmJGz3njzUfJigt082cs2bLZ5Hd+uOpOKYxzPa4qOkAMAMHBd2vrlQLFtuB+zqVtvnq86GHJP4ughZ9t3czt+LQ9Xe90Ot0uGtfIfQykvFpHCI9lyOsDq4xsfnkpvXM14J1HPCDkAAAMXauvX5ovUtk+sxnWEXp3oeKl0Q3/z3e34sNO1zgv3uLxGQmzxh/qScdWIEl02opRwCh0v0ZyXeJ1PZZvVfKjzGrsm5AAADEbuyl7Rxu16B7FgkLVy856uIh5OipcZ2qrUM3G6Hoh1yAl1sdRWhC7f2fgVBFJLPRBWumbCtyCVc0N7OquuHCEHAIBCW/aU/2Cf0U2z9jq+7Xvfwuv49mGcN4O/MJit8mnWGgXhrbJSTJ7TvSSpIyEHAAAYFCEHAAAYFCEHAAAYFCEHAAAYFCEHAAAYFCEHAAAYFCEHAAAYFCEHAAAYFCEHAAAYFCEHAAAYFCEHAAAYlF6HnA8fPrT6/HDH3csRP3z4sNlPYofLPx36GgEAYKh6HXIWGXnjQ54djxs8jcwjBs8hkWRyghAAABDT05CzS3RplQ3+/vN/f/7dsJOcHTZuE0tNbdNU45kAAMA719OQU5HfuG8XA/75649yxukWq3KO2xhmKp+nO3kAAICYMwg5OfmhWzL5568//vjrn10O3bhlTn9UMdgIOQAAsKNeh5zM3JJu+sf/2phx9tmD1HjOH8qzdIQcAADopu8hJ+fzVv+59fef/2vIOPvpn0mfVebnDdcCAACs9T3k7JIfgv+5UV9yoEN0aTxKfeeV7YUcAADYr76HnJzPO4Wc2LJq1S9m5or0ZrFgVv+WkAMAADvqe8g5UE9ObVm18NFjX49tHLuE2FkJOQAAsHd9Dzk5nxf/MxEbCtotOZATLXKGq8U+CR5LyAEAgG6GEHLqn6fnzzRmnLyktNMGxZ4cIQcAAPao7yEnZ7jaZsvYHiofppdVa5uscv66iHcNVc5QyAEAgB31NOQk4k1n631Hlxw4xEEP4XiPAQAAzlBPQw4AAEA3Qg4AADAoFy//vrzD+u/bf6e+8+389+2/k980pZRSSimlzqLeaciZfZmdOra0M/syO/lNU0oppZRS6izqnYac1+nrr1+/Tp1ccv369et1+nrym6aUUkoppdRZ1DsNOS//vvz48ePU4SXXjx8/Tn67lFJKKaWUOpd6vyHn27dvpw4vub59+3by26WUUkoppdS51PsNOZ8/fz6LEWu/fv36/PnzyW+XUkoppZRS51LvN+S8/Pvy/fv3U0eYZt+/fz/5jVJKKaWUUuqM6l2HnNnsDNZYm82sq6aUUkoppVSLetch56X3yw9YckAppZRSSqm29d5DztfZ11MHmZSvs68nv0VKKaWUUkqdV733kPPy78v3eU9n5nyfm42jlFJKKaVU6xJyXr58/vLz589TJ5qqnz9/fvn85eQ3RymllFJKqbMrIefl5d+Xb197986cb1+9G0cppZRSSqku9X8f6x0qMn2PdwAAAABJRU5ErkJggg==" alt="" />

对于具体的显示,我们的前台显示可以自己去组装,上面显示的只是一种标准的形式,即由GenerateStandardBanner方法提供的形式。

返回目录

缓存篇(Cache)~第一回 使用static静态成员实现服务器端缓存(导航面包屑)的更多相关文章

  1. 缓存篇(Cache)~第二回 使用static静态成员实现服务器端缓存(导航面包屑)~续

    返回目录 在写完首篇cache文章后,有些朋友给我来信,希望可以使用JS的方法来实现这个导航功能,所以,才有了这篇文章,JS与C#不同,它虽然有引用类型,但它不具备一些引用类型的特性,如它的方法参数为 ...

  2. 缓存篇(Cache)~大话开篇

    回到占占推荐博客索引 闲话杂淡 想写这篇文章很久了,但总是感觉内功还不太够,总觉得,要写这种编程领域里的心法(内功)的文章,需要有足够的实践,需要对具体领域非常了解,才能写出来.如今,感觉自己有写这种 ...

  3. 缓存篇(Cache)~第三回 HttpModule实现网页的文件级缓存

    返回目录 再写完缓存篇第一回之后,得到了很多朋友的好评和来信,所以,决定加快步伐,尽快把剩下的文章写完,本篇是第三回,主要介绍使用HttpModule实现的文件级缓存,在看本文之前,大家需要限度Htt ...

  4. 缓存篇~第七回 Redis实现基于方法签名的数据集缓存(可控更新,分布式数据缓存)

    返回目录 本篇文章可以说是第六回 Microsoft.Practices.EnterpriseLibrary.Caching实现基于方法签名的数据集缓存(可控更新,WEB端数据缓存)的续篇,事实上,有 ...

  5. 缓存篇~第六回 Microsoft.Practices.EnterpriseLibrary.Caching实现基于方法签名的数据集缓存

    返回目录 这一讲中主要是说EnterpriseLibrary企业级架构里的caching组件,它主要实现了项目缓存功能,它支持四种持久化方式,内存,文件,数据库和自定义,对于持久化不是今天讨论的重要, ...

  6. 缓存篇~第八回 Redis实现基于方法签名的数据集缓存~续(优化缓存中的key)

    返回目录 上一讲主要是说如何将数据集存储到redis服务器里,而今天主要说的是缓存里的键名,我们习惯叫它key. redis或者其它缓存组件实现的存储机制里,它将很多方法对应的数据集存储在一个公共的空 ...

  7. (转)高性能网站架构之缓存篇—Redis集群搭建

    看过 高性能网站架构之缓存篇--Redis安装配置和高性能网站架构之缓存篇--Redis使用配置端口转发 这两篇文章的,相信你已经对redis有一定的了解,并能够安装上,进行简单的使用了,但是在咱们的 ...

  8. 前端技巧:禁止浏览器static files缓存篇(转)

    前端技巧:禁止浏览器static files缓存篇 由于CSS/JS文件经常需要改动,前端调试时是不希望浏览器缓存这些文件的. 本文记录博主的经验. Meta法 目前在chrome调试还没有遇到问题, ...

  9. Spring Boot 揭秘与实战(二) 数据缓存篇 - Redis Cache

    文章目录 1. Redis Cache 集成 2. 源代码 本文,讲解 Spring Boot 如何集成 Redis Cache,实现缓存. 在阅读「Spring Boot 揭秘与实战(二) 数据缓存 ...

随机推荐

  1. H5中的拖拽事件

    最近浏览了张鑫旭大神的基于HTML5 drag/drop模块拖动插入排序删除完整实例,感觉受益匪浅.于是将最做的demo记录下来. 首先浏览一下事件,这些事件比较好记,只要记住用在谁的身上就好了,无非 ...

  2. android studio 华为手机看不到具体的错误日志

    手机的开发人员选项打开了么,其中的 USB 调试打开了么?搞定他们并重新运行,是否能找到我们的日志?否,转到 2. 日志中是否有这样 could not disable core file gener ...

  3. hdu 1342(DFS)

    Lotto Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  4. Accordion - 手风琴

    //手风琴效果 <div style="overflow:hidden;height:400px;width:948px;"> <div class=" ...

  5. IT小喇叭-企业品牌宣传、产品营销推广的首选

    IT小喇叭-企业品牌宣传.产品营销推广的首选 IT小喇叭,成立于2015年6月初,成都芮嘉科技有限公司旗下产品,主要进行媒体资源整合.宣传报道:使移动互联网等相关企业的产品宣传.品牌营销变得更加方便. ...

  6. POJ 2096 Collecting Bugs (概率DP)

    题意:给定 n 类bug,和 s 个子系统,每天可以找出一个bug,求找出 n 类型的bug,并且 s 个都至少有一个的期望是多少. 析:应该是一个很简单的概率DP,dp[i][j] 表示已经从 j ...

  7. 将图片压缩后转Base64函数

    function CutImgToBase(fn: string): string; // 压缩图片只能压缩bmp:将jpg转换成bmp再压缩 var m1: TMemoryStream; m2: T ...

  8. [poi2007]mem

    题意:给定点数n<=300000的一棵树,然后初始时每条边权值为1,接下来按照时间点先后顺序的n+m-1个操作, 操作有两种: 1.A a b 把a到b的边权改为0 2.W u 求1号点到u号点 ...

  9. Linux学习进阶路线图

    摘自:http://blog.csdn.net/zdwzzu2006/article/details/4334791 Linux 基础 Linux 基础 Linux安装专题教程 Linux中文环境 L ...

  10. zabbix3.x web设置手册(2)

    在浏览器中输入:http://10.50.32.48/zabbix/setup.php 如下图: 点击Next step: 如上图,右侧全为ok,则点击Next step:若右侧有fail的情况,需要 ...