关于XML配置使用的个人感觉

其实昨天发表的的《利用代码读取XML文档》
http://mqingqing123.cnblogs.com/archive/2005/10/11/252410.html

介绍了如何使用代码读取XML配置。这里谈一下对这种配置使用的看法,纯属个人意见,不保证正确性

在那篇文章里其实是对二十四画生发表的从ASP.NET Portal Starter Kit中学到的调整顺序新思路
的延续。
那篇文章的网址如下:
http://www.cnblogs.com/esshs/archive/2005/04/18/139829.html

在那篇文章里提到了Portal可能的一个bug,当然正如你在他随后的评论里看到,这并不是一个bug,而是由于
“查一查InitializeComponent() 中,有没有连结事件的代码如:this.upBtn.Click += new System.Web.UI.ImageClickEventHandler(this.UpDown_Click);,不知怎么搞得VS有时会自动删除这些代码。有一次我为这个问题整整检查了一天,那才叫晕。”的原因

但是我感觉在使用XML配置时最后必须而且也应该重视的一个重要因素--缓存,请看Portal在configtion.cs里实现
GetSiteSettings其实就是读取XML文档

public static SiteConfiguration GetSiteSettings()
  {
   SiteConfiguration siteSettings 
= (SiteConfiguration) HttpContext.Current.Cache["SiteSettings"];
   
// 如果缓存不存在,则读取XML文档
   if(siteSettings == null)
   {
        siteSettings 
= new SiteConfiguration();
    
// 检索XML的实际位置
    string configFile = HttpContext.Current.Server.MapPath(ConfigurationSettings.AppSettings["configFile"]);
    
// 赋值
    siteSettings.Tab.TabIdColumn.AutoIncrement = true;
    siteSettings.Module.ModuleIdColumn.AutoIncrement 
= true;
    siteSettings.ModuleDefinition.ModuleDefIdColumn.AutoIncrement 
= true;
    
// Load the XML data into the DataSet
    siteSettings.ReadXml(configFile);
  
    
// Store the dataset in the cache
    HttpContext.Current.Cache.Insert("SiteSettings", siteSettings, new CacheDependency(configFile));
   }
   
return siteSettings;
  }


SaveSiteSettings其实就是写入XML文档

public void SaveSiteSettings()
  {
   
// Obtain SiteSettings from the Cache
   SiteConfiguration siteSettings = (SiteConfiguration) HttpContext.Current.Cache["SiteSettings"];
   
// 检测缓存
   if(siteSettings == null)
   {
    
// If SaveSiteSettings() is called once, the cache is cleared.  If it is
    
// then called again before Global.Application_BeginRequest is called, 
    
// which reloads the cache, the siteSettings object will be Null 
    siteSettings = GetSiteSettings();
   }
   
string configFile = HttpContext.Current.Server.MapPath(ConfigurationSettings.AppSettings["configFile"]);
   
// Object is evicted from the Cache here.  
   siteSettings.WriteXml(configFile);
  }
 }

 请注意:SaveSiteSettings的英文解释,这里没有进行翻译,是读者自己根据英文理解

如果Configuration.cs仅仅用ReadXML和WriteXML确实没有多大使用价值,但是他配置了缓存,而且使用了缓存依赖。所以需要说明缓存的优点和缺点

优点:提高性能,原因非常简单,不说了
确定:不能及时更新页面 ,例如一场运动比赛,可能从始到末一直是0:0,那么当客户端访问服务器页面时,利用缓存,客户更本就不需要更新比赛结果。但是也有可能比赛一直变动,0:1,1:1,这样经常变动的情况也是存在的,在这种情况下,如果你利用缓存,可能比赛已经是10:10了,客户还显示0:0,因此这就是缓存致命的缺点

为了解决这个问题,提出了缓存依赖,也就是说缓存的更新依赖与键值或者文件。
在Portal里就是利用的是文件依赖,当你更改XML配置文档时,系统就自动清除缓存,然后从新读取配置文件,使得你的配置即使起作用,这种缓存的实现请注意下面的代码
   HttpContext.Current.Cache.Insert("SiteSettings", siteSettings, new CacheDependency(configFile));
   基本意义就是SiteSettings缓存依赖文件configFile,只要configFile稍微有点分吹草动,缓存就失效,这样就能够实现及时更新

所以,昨天有人说这种读取XML文档的代码没有价值,我感觉是有价值的,主要是这种价值适用在什么地方,并不是任何地方用该方法都好
 从Portal看,只所以用这种配置是因为,一个网站可能访问者很多,但是页面的管理并不是一直变动,也就意味者系统并不是经常读取XML,就像你看到www.asp.net,它的框架一直不变,就不需要读取XML配置。

注意:你往Portal里加入数据(而不是框架),它是存放在SQL数据库里,这和XML没有关系
posted @ 2005-10-12 09:07  启明星工作室  阅读(1220)  评论(0编辑  收藏  举报