• 动态【配置文件】之实现(一)


      上次,我们分析了“动态”配置文件的基本需求,也基本定下了设计思路。我们今天就来实现第一要素:读写配置文件

      按照我们上次的分析要求,我设计了以下几个类

    ConfigManager,【配置文件管理类】

    Config,【单个配置文件】

    ConfigSection,【配置文件中的单个程序节】

    三个类依次包含,为了方便程序调用,为此,设计了三个接口,分别由三个类来实现。这样一来,外部调用的程序,只需要知道接口,而不需要引用这个类;

    部分定义代码

    IConfigManager定义

    IConfigManager
     1     /// <summary>
     2     /// 配置文件管理接口
     3     /// </summary>
     4     public interface IConfigManager
     5     {
     6         /// <summary>
     7         /// 增加配置文件
     8         /// </summary>
     9         /// <param name="pCfg">配置文件</param>
    10         void AddConfig(IConfig pCfg);
    11         /// <summary>
    12         /// 删除配置文件
    13         /// </summary>
    14         /// <param name="pCfg">配置文件</param>
    15         void DeleteConfig(IConfig pCfg);
    16         /// <summary>
    17         /// 定位配置文件
    18         /// </summary>
    19         /// <param name="pName"></param>
    20         /// <returns></returns>
    21         IConfig FindConfig(string pName);
    22         /// <summary>
    23         /// 配置文件是否存在
    24         /// </summary>
    25         /// <param name="pName"></param>
    26         /// <returns></returns>
    27         bool HasExist(string pName);
    28         /// <summary>
    29         /// 默认配置文件后缀
    30         /// </summary>
    31         string DefaultEx
    32         {
    33             get;
    34             set;
    35         }
    36         /// <summary>
    37         /// 默认配置文件存放位置
    38         /// </summary>
    39         string DefaultFolder
    40         {
    41             get;
    42             set;
    43         }
    44         /// <summary>
    45         /// 加载目录下的所有配置文件
    46         /// </summary>
    47         void Load();
    48         /// <summary>
    49         /// 当前的配置文件
    50         /// </summary>
    51         IConfig CurrentConfig
    52         {
    53             get;
    54             set;
    55         }
    56     }

    IConfig定义

    代码
     1     /// <summary>
     2     /// 单个配置文件
     3     /// </summary>
     4     public interface IConfig
     5     {
     6         /// <summary>
     7         /// 配置文件名称
     8         /// </summary>
     9         string Name
    10         {
    11             get;
    12             set;
    13         }
    14         /// <summary>
    15         /// 增加程序节
    16         /// </summary>
    17         /// <param name="pCfgSec"></param>
    18         void AddSection(IConfigSection pCfgSec);
    19         /// <summary>
    20         /// 删除程序节
    21         /// </summary>
    22         /// <param name="pCfgSec"></param>
    23         void DeleteSection(IConfigSection pCfgSec);
    24         /// <summary>
    25         /// 定位程序节
    26         /// </summary>
    27         /// <param name="pName"></param>
    28         /// <returns></returns>
    29         IConfigSection FindSection(string pName);
    30         /// <summary>
    31         /// 查询程序节是否存在
    32         /// </summary>
    33         /// <param name="pName"></param>
    34         /// <returns></returns>
    35         bool HasExist(string pName);
    36         /// <summary>
    37         /// 直接读取某个程序节下的设置
    38         /// </summary>
    39         /// <param name="pSectionName"></param>
    40         /// <param name="pKeyName"></param>
    41         /// <param name="pDefaultValue"></param>
    42         /// <returns></returns>
    43         object ReadKeyValue(string pSectionName, string pKeyName, object pDefaultValue);
    44         /// <summary>
    45         /// 写入某个程序节下,如果此程序节不存在,将创建
    46         /// </summary>
    47         /// <param name="pSectionName"></param>
    48         /// <param name="pKeyName"></param>
    49         /// <param name="pValue"></param>
    50         void WriteKeyValue(string pSectionName, string pKeyName, object pValue);
    51         /// <summary>
    52         /// 加载文件,读取全部配置
    53         /// </summary>
    54         /// <param name="pFileName"></param>
    55         void LoadfromFile(string pFileName);
    56         /// <summary>
    57         /// 设置保存到文件
    58         /// </summary>
    59         void SaveToFile();
    60         /// <summary>
    61         /// 自动保存
    62         /// </summary>
    63         bool AutoSave
    64         {
    65             get;
    66             set;
    67         }
    68         /// <summary>
    69         /// 是否开启文件监测
    70         /// </summary>
    71         bool Watched
    72         {
    73             get;
    74             set;
    75         }
    76         /// <summary>
    77         /// 此配置文件的文件路径
    78         /// </summary>
    79         string FileName
    80         {
    81             get;
    82             set;
    83         }
    84     }

    IConfigSection定义

    代码
        /// <summary>
        
    /// 配置分类
        
    /// </summary>
        public interface IConfigSection
        {
            
    string SectionName
            {
                
    get;
                
    set;
            }
            
    void Add(string pKeyName, object pKeyValue);
            
    void Delete(string pKeyName);
            
    object ReadKeyValue(string pKeyName, object pDefaultValue);
            
    void WriteKeyValue(string pKeyName, object pValue);
            
    void SaveToFile();
        }

    由于本次采用ini文件作为配置文件的载体,所以,在读写上就省略了很多方法。甚至在IConfig接口上提供了读写方法,但为了XML文件之类的读写,还是提供了方法定义。

    (未完待续...)

  • 相关阅读:
    Linux基本命令-chmod
    Linux操作系统启动流程
    博客园背景美化
    Windows安装python3.x后,pip list警告!DEPRECATION: The default format will switch to columns in the future.
    Python2.7更新pip:UnicodeDecodeError: 'ascii' codec can't decode byte 0xb7 in position 7: ordinal not in range(128)
    .Net程序员学用Oracle系列(23):视图理论、物化视图
    .Net程序员学用Oracle系列(22):分析函数(OVER)
    .Net程序员学用Oracle系列(21):分组查询(GROUP BY)
    .Net程序员学用Oracle系列(20):层次查询(CONNECT BY)
    .Net程序员学用Oracle系列(19):导出、导入(备份、还原)
  • 原文地址:https://www.cnblogs.com/feedback/p/1736931.html
Copyright © 2020-2023  润新知