动态【配置文件】之分析
几乎所有的程序都会用到配置文件,我们对配置文件的需求只有2个,保存用户的选择,下次界面展示的时候还原。这是我们使用配置的唯一的也是最重要的目的,如果这点达不到,就应该放弃所采用的方式。目前,比较常用的配置文件方式有注册表、ini文件、xml,C#下常用的还有app.config或者Web.config文件,这个文件本质还是xml,只是fx封装了读写。
我们需要讨论的是如何方便的读写配置文件,以及展示配置界面。所谓的“动态”是包含2个方面,其一指配置的内容是动态的,易于添加和删除的,这需要跟界面展示配合,其二,所配置的选项也是动态的,如下拉框的内容并不是设计期可以确定,而是在程序运行中来进行确定。当然,如果期望纯代码区维护,也是可以而且可行,只是太繁琐了。那有没有一种解决方案,可以达到这样的效果,当程序更新后,需要在配置文件中新增一个配置项时候,在界面展示的时候可以自动体现出来呢?今天我们就来探讨一下。
第一、读写配置文件。我们可以设计一个类来管理配置文件中所有的节点,不妨定义为ConfigManager,它至少需要提供以下方法,增删改定位Section,增删改Key、KeyValue
Section表示一个环节,Key表示一个设置项,KeyValue表示一个设置项的数值。任何一种配置文件几乎都能满足这些要求,我们采用了ini文件来进行,这样方便项目发布;
第二、界面展示。由于要求为“动态”,所以,展示的界面就不能在程序内部定义。我们可以定义一个ConfigUiManager类,它需要保存和还原单个或者多个界面,我们的项目中涉及到的配置界面应该会有单个或者多个,如Office一样,可以集中设置,也可以单独在某项处理的时候弹出对应功能的设置界面。满足这样的需求,我们可以采用序列化的方式来进行,也可以采用SharpDev的方式,用xml来定义窗体控件和布局,然后在运行期来展示。
第三、界面事件。如下拉框的选项,那么来源只有在运行期才能确定。这就需要用到脚本技术了,我们对此脚本的要求是运行期绑定事件和执行,目前我采用的是Lua脚本。当然,通过cs代码,然后运行期编译称dll然后加载执行,也是可行的方式,只是保密性差了点。
第三、界面和配置文件的关联。我们需要把配置文件的设置反映到界面上,同时也需要把界面的设置保存到配置文件中。我们不妨定义为ConfigLinker。
(未完待续...)