技术开发 频道

利用泛型进行网站序列化配置

$PageTitle=概述}
【IT168技术文档】

  前言

  在开发网站的时候,我们通常都需要做一些配置,把配置保存在数据库或者文本中,比如开发一个论坛程序,我们有邮箱配置,缓存配置,相册配置,回复帖子配置,图片水印配置,页面关键字配置等等,这么多配置。我们可以用数据库把所有配置都保存到一个表中,但现在我介绍的是用文本配置,序列化保存配置好数据。

  文本配置的好处

  为什么要用文本进行网站的配置呢,有几个好处:
  1. 修改方便,包括需求的变更,配置参数的设置。只需要修改配置类,重新配置就可以了。
  2. 与数据库脱离,方便移植。
  3. 应用性广,有些项目不一定用到数据库,这就体现了文本配置的好处。

  实现思路


  1. 先定义好IConfig<T>和IConfigManager<T>的接口。其中,IConfig<T>是配置文件类的基类,IConfigManager<T>是实现配置文件配置的基类,2个接口里面都定义好了 bool SaveConfig(T t); T LoadConfig();这2个方法。他们之间的关系如下图:

  2. 利用where关键字对泛型进行约束。
  SDK是这样描述的:

  where 子句用于指定类型约束,这些约束可以作为泛型声明中定义的类型参数的变量。例如,可以声明一个泛型类 MyGenericClass,这样,类型参数 T 就可以实现 IComparable<T> 接口:

public class MyGenericClass<T> where T:IComparable { }
  而我们定义的IConfig如下
/**//// <summary> /// 配置信息类接口 /// </summary> public interface IConfig<T> where T:IConfig<T>,new() { /**//// <summary> /// 配置保存的文件名称 /// </summary> string FileName { get; } bool SaveConfig(T t); T LoadConfig();
}
  这就保证了T一定是是实现IConfig接口的。同理。 ConfigManager<T>也定义如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using Madou.Core; namespace Madou.Config { [Serializable] internal class ConfigManager<T>:IConfigManager<T> where T:IConfig<T>, new() { IConfigFileManager Members#region IConfigFileManager<T> Members public T LoadConfig() { T t = new T(); if (!t.FileName.FileExists()) { return t; } else { T _t = (T)SerializationHelper.Deserialize(t.FileName); return _t; } } public bool SaveConfig(T t) { try { SerializationHelper.Serialize(t,t.FileName); return true; } catch(Exception) { return false; } } #endregion } }
0
相关文章