如何设计一个配置系统

比如象Word软件的配置如何实现。

有n个对象,每个对象都需要保存一些参数设置。同时,有一个复杂的Dialog来配置所有这些对象的参数,设置完成后可以立即更新程序。

我本来打算弄一个接口,这个接口可以: LoadParam,SaveParam,ConfigParam(这个会生产一个配置窗体)。所有对象都从这个接口继承。然后当程序需要配置时,调用每一个对象的ConfigParam,把所有产生的配置窗体定位到一个容器Dialog上,形成象一个PageControl一样的结构。

但是想了一下觉得太麻烦了。

还不如直创建一个全局的ConfigDialog对象,显示,更新,读取,保存程序中所有的参数,然后由client代码,把这些参数赋给所有的对象。不过这样我觉得程序太乱了,每个参数信息保存在了两个地方,一个在对象本身,一个在ConfigDialog里,而且对象参数的改变可能不仅仅只由CongfigDialog来改变,这样的话还要随时更新Config里的数据,使Config对象到处被引用,非常混乱。

大家都用的什么好方法呢

所有可配置的对象实现Configurable 接口
调用Dialog更新Configuration,然后重新config所有configurable对象

感觉象GUI设计这么细微的地方使用模式很难判定,建议先写代码,然后refactoring到某个设计模式,也许没有设计模式可用。

个人认为,在实现很重要功能时,建议使用设计模式,这样便于他人理解,便于自己扩展,对于不重要功能,闭着眼睛写代码,等以后再重整Refactoring即可。

要为一大团意大利面条refactoring,真是件困难的事,更坏的是让你后面的代码越来越乱

那好,我提个解决模式:
“有n个对象,每个对象都需要保存一些参数设置。同时,有一个复杂的Dialog来配置所有这些对象的参数,设置完成后可以立即更新程序。”

使用Observer模式,Dialog处设定观察点,n个对象为接受激活的通知,一旦激活,每个对象更新自己应该更新的程序。

Observer模式在界面用得多。


光用Obserer是不够的,肯定要用到Mediator。
其实不用关心用什么模式,你对要配置的东西都非常的了解吗?你知道那些要变,那些不需要变吗?如果这些问题都没有搞清楚,先不要去设计。真正需要的是对问题域的完整的理解。