设计个性化、灵活、实时更新的配置管理器
2011-12-29 09:58
405 查看
这里所说的个性化、灵活、实时更新的定义?
个性化,是指你可以随意定义自己想要的配置结构、保存格式、存放位置等等。
灵活,是指可以方便的对配置进行读、写操作,并可以很容易实现任意多个配置管理器。
实时更新,是指在配置发生改变时可以实时的更新,且不会重启Web应用程序。
下面开始讲解设计。既然是配置管理器,那还是先定义好接口吧,请看IFileConfigManager<T>:
?
T参数当然就是定义的配置类型了,而且必须是引用类型,有无参数构造函数。Path是配置文件的完整路径,Encoding是读取和保存配置时用的编码,Serializer是处理配置序列化和反序列化的具体实现,GetConfig()是获取当前配置,SaveConfig()是保存当前配置,SaveConfig(T config)是保存指定的配置,BackupConfig(string backupPath)备份配置到指定路径,RestoreConfig(string restorePath)从指定路径还原配置。
接口IFileConfigManager<T>中定义的Serializer是用于支持自定义配置序列化功能的,下面看看FileConfigSerializer<T>的实现:
?
FileConfigSerializer<T>定义为抽象类,是为了方便默认的使用和扩展,里面使用的SerializationUtil类,是本人为了方便写的一个简单的序列化助手类,相信大家对对象的序列化操作不会陌生了,无非使用了System.Xml.Serialization.XmlSerializer、System.Runtime.Serialization.Formatters.Binary.BinaryFormatter、System.Runtime.Serialization.Json.DataContractJsonSerializer和System.Runtime.Serialization.NetDataContractSerializer来处理。如果不想用它们,你还可以实现FileConfigSerializer<T>进行完全的自己定义配置的加载与保存方式。对于json序列化推荐大家使用http://www.codeplex.com/json/ 。
好了,大家已经知道了接口的定义了,下面来讲讲实时更新配置功能有哪些方法可以实现。我们知道,如果利用Web.config来配置的话,第一:如果配置内容多而杂,那会很乱;第二:如果手动修改配置,会导致Web重启(而我们并不希望它重启),所以,如果要解决上面两点问题,我们就要思考点什么了。上面我提到了Discuz!论坛的.net开源版本里配置管理,它是使用Timer来定时查检配置是否有修改,如果有修改就重新加载的,恩,这是一个可行的方案。还有其它方法吗?必须是有的,只要你肯去思考,下面列出本人想到的几个比较容易想到的方案:
方法1:使用Timer(.net库里有三个timer,请自行选择),每隔一秒就查检一下配置文件修改时间,如果文件被修改了,正更新最后修改时间并重新加载配置内容;
方法2:使用System.IO.FileSystemWatcher,可以实时监控配置文件,一发生改变即重新加载配置内容;
方法3:使用System.Web.Caching.Cache,加上缓存依赖,文件更改后缓存会失效,同样可以实时重新加载配置内容。
这三种方法中,方法3是本人比较推荐的,因为它的开销最小,而且可以实时更新配置,实现起来也是最简单的。对于新手可能看到这还不知道实现,下面再贴出本人实现上面接口的四个类,一个是默认管理器类,没有实时更新的功能,其它三个就是实现上面三种方法的管理器类了。
?
?
?
?
个性化,是指你可以随意定义自己想要的配置结构、保存格式、存放位置等等。
灵活,是指可以方便的对配置进行读、写操作,并可以很容易实现任意多个配置管理器。
实时更新,是指在配置发生改变时可以实时的更新,且不会重启Web应用程序。
下面开始讲解设计。既然是配置管理器,那还是先定义好接口吧,请看IFileConfigManager<T>:
?
接口IFileConfigManager<T>中定义的Serializer是用于支持自定义配置序列化功能的,下面看看FileConfigSerializer<T>的实现:
?
好了,大家已经知道了接口的定义了,下面来讲讲实时更新配置功能有哪些方法可以实现。我们知道,如果利用Web.config来配置的话,第一:如果配置内容多而杂,那会很乱;第二:如果手动修改配置,会导致Web重启(而我们并不希望它重启),所以,如果要解决上面两点问题,我们就要思考点什么了。上面我提到了Discuz!论坛的.net开源版本里配置管理,它是使用Timer来定时查检配置是否有修改,如果有修改就重新加载的,恩,这是一个可行的方案。还有其它方法吗?必须是有的,只要你肯去思考,下面列出本人想到的几个比较容易想到的方案:
方法1:使用Timer(.net库里有三个timer,请自行选择),每隔一秒就查检一下配置文件修改时间,如果文件被修改了,正更新最后修改时间并重新加载配置内容;
方法2:使用System.IO.FileSystemWatcher,可以实时监控配置文件,一发生改变即重新加载配置内容;
方法3:使用System.Web.Caching.Cache,加上缓存依赖,文件更改后缓存会失效,同样可以实时重新加载配置内容。
这三种方法中,方法3是本人比较推荐的,因为它的开销最小,而且可以实时更新配置,实现起来也是最简单的。对于新手可能看到这还不知道实现,下面再贴出本人实现上面接口的四个类,一个是默认管理器类,没有实时更新的功能,其它三个就是实现上面三种方法的管理器类了。
?
相关文章推荐
- 怎么设计个性化、灵活、实时更新的配置管理器?讲讲实现思路
- 【ASP.NET Core快速入门】(六)配置的热更新、配置的框架设计
- 实时数据缓存管理的初步设计
- 模块管理常规功能自定义系统的设计与实现(52--功能更新[2] 对百分比字段的操作)
- .NET 插件系统框架设计(二) 使用对象序列化实现自定义配置文件管理
- C# .NET 可灵活配置登录窗体、主窗体的快速信息管理系统开发架构参考
- 路由器交换机密码恢复、IOS与配置文件更新、IOS灾难恢复(网络设备的维护和管理)
- 阿里云助开发者轻松使用云产品 ——灵活配置、轻松管理、架构部署不求人
- 关于管理后台更新与响应的设计
- Java虚拟机性能管理神器 - VisualVM(3) 插件安装与更新路径配置
- ASP.NET下使用xml反序列化、缓存依赖实现个性化配置文件的实时生效
- 默认+个性化灵活配置你的系统
- spring+redis集成,策略设计,灵活配置,支持单机和集群
- Atitit 项目源码管理 attilax著 1. 源码结构sdk目录结构 1 1.1. 源码分类,配置文件,主程序文件,sql文件 1 2. 源码管理,提交,更新,与同步 1 2.1. 源码同步
- 游戏UI框架设计(五): 配置管理与应用
- 不重启tomcat、jboss更新jsp,实时生效配置指导
- 默认+个性化灵活配置你的系统
- ASP.NET2.0中个性化用户配置以及成员资格和角色管理在SQL Server 2000数据库中的配置
- 菜鸟入门【ASP.NET Core】6:配置的热更新、配置的框架设计
- 消息队列_RabbitMQ-0003.深入RabbitMQ节点/配置/管理及日志实时化?