统一配置器框架
禽兽v5 2007-09-16 12:56:54 构思了很久,写了一小部分,10月份继续写,这两天挺郁闷的,算是分散一下注意力吧。
1.原因与目的
由于在各种项目中存在各种不同类型的配置,一般会设计成xml和对应的解析器,但每个工具(开源或私有)对配置器的封装都不相同,造成学习成本很高,api风格多样和难以管理的问题,且其中有很多的重复编码,因此需要一个统一的配置器减轻编写配置器的负担。
比如struts的配置文件struts-config.xml很经典了,hibernate的hibernate.cfg.xml,spring的配置器等等。
因为改过hibernate代码,知道他内部是两套配置器,Configurations一套,SessionFactory一套,感觉不是好的设计。
本质上来说,配置的文件内容倒可以很多样,比如xml,json,数据库都可以,当然到了内存中一般都是对象了。
本系统最好由一个具备反射库的语言编写,比如java,python,php,ruby,delphi等。
2.系统结构
2.1配置器
Configuration Tool,比如有表单(form),对象-关系映射(o/r m)模块,菜单(menu),这些子系统都需要各自的配置器。配置器不可同名。配置器可拥有0~n个配置器,那么最开始的配置器称之为根配置器。
2.2.模块
Module,每个配置器都可以包含0~n个模块,且模块可以继续包含模块,相同配置器下模块不可同名。
比如对于表单配置系统,可以有系统管理(system) 模块,工作流管理(workflow)模块等。
2.3映射
Mapping,每个配置器/模块可包含0~n个映射,相同配置器下映射不可同名。
映射指向一个包含具体的配置内容的文件,比如对于表单配置系统的映射项指向一个具体的表单配置文件,一个菜单配置的映射项指向一个包含具体的菜单项的文件。
2.4定义
Definition,指对于映射文件中不同的xml标签的实现类,比如指出简单表单标签SimpleForm的实现类,或者指出一个hibernate映射标签的class的实现类,或者菜单配置中menu标签的实现类,以此构造出内存中的对象。
另外,一个xml标签的实现类,符合POJO定义,即该类是一个持久化类,这样很方便再生成hibernate配置,实现将配置内容存到数据库中。
3.配置器生成器
原则上,每一种配置都符合DTD或者XSD,因此考虑一个工具可以根据DTD或者XSD生成对应的配置器器的基本代码,节省xx%以上的工作。
而且,统一配置器本身也符合DTD规范,因此本项目应先完成本工具,再以此生成统一配置器,再生成其他系统的配置器。