C++ 读/写同一配置文件的不同版本的设计方法
在我们的项目中,我们得到了一个使用外部配置文件(比如server.xml)的应用程序。现在我们需要在C++/QT中设计一个安装工具GUI来读取/编辑这样的配置文件,它应该能够处理这样的文件的所有不同版本。用户将选择文件版本,然后继续编辑。从一个版本到另一个版本变化不大,可能有一个新的xml标记,一个具有不同名称或位于不同位置的标记 这样做的最佳设计方法是什么?我们计划采用标准的MVC设计模式,但是如何处理所有不同的配置版本而不重新编写相同的GUI代码呢 下面是示例配置文件:C++ 读/写同一配置文件的不同版本的设计方法,c++,xml,qt,design-patterns,user-interface,C++,Xml,Qt,Design Patterns,User Interface,在我们的项目中,我们得到了一个使用外部配置文件(比如server.xml)的应用程序。现在我们需要在C++/QT中设计一个安装工具GUI来读取/编辑这样的配置文件,它应该能够处理这样的文件的所有不同版本。用户将选择文件版本,然后继续编辑。从一个版本到另一个版本变化不大,可能有一个新的xml标记,一个具有不同名称或位于不同位置的标记 这样做的最佳设计方法是什么?我们计划采用标准的MVC设计模式,但是如何处理所有不同的配置版本而不重新编写相同的GUI代码呢 下面是示例配置文件: <?xml v
<?xml version="1.0" encoding="utf-8"?>
<Server_configuration ver="11">
<core>
<enable-tms>true</enable-tms>
<enable-gui-messages>true</enable-gui-messages>
<waiting-for-config-timeout>10000</waiting-for-config-timeout>
<remoting>
<port>50000</port>
<join-timeout>5000</join-timeout>
<ismultithread>true</ismultithread>
<maxconcurrentrequests>20</maxconcurrentrequests>
</remoting>
</core>
<content>
<ftp>
<ip>192.168.0.227</ip>
<port>21</port>
<userid>******</userid>
<passwd>******</passwd>
</ftp>
<library>
<ip>192.168.0.227</ip>
<port>50023</port>
</library>
<local>
<asset-root>/assetroot</asset-root>
<kdm-expiration-warning>172800000</kdm-expiration-warning>
</local>
<hula-store-daemon>
<ip>127.0.0.1</ip>
<port>5567</port>
</hula-store-daemon>
</content>
</Server_configuration>
真的
真的
10000
50000
5000
真的
20
192.168.0.227
21
******
******
192.168.0.227
50023
/资产负债表
172800000
127.0.0.1
5567
这并不是一个简单的解决方案,但我这里有一些事情要做/考虑。每种情况都会有所不同
- 在配置文件中有一个明确的版本标识符。在他们身上留下指纹真是一件(容易出错的)痛苦事
- 考虑使用一个可以在不同版本之间更新的工具。这将比阅读旧版本并尝试应用它们更容易。
- 我可能更容易单独执行每个版本步骤,但这可以使转换更少“无损”。一个快乐的混合是从一个版本到另一个版本进行小的更新,但有“检查点”的大的升级,可以直接跳到最新的(或最新的“检查点”)。这有点像偶尔使用完整备份快照
- 随时通知用户。如果您更改系统管理员的设置,他将不会高兴。您可能希望使流程具有交互性,或者将注释放入每个添加/移动/删除设置的文件中。我还建议在文件的某些部分保留删除的设置,以供用户参考。(记下它们为什么也在那里)
- 备份旧文件。您的脚本将崩溃,并将吃掉数据。执行类似于命名当前文件的操作
。在文件的不同部分保存设置并不总是足够的,这将为用户省去很多心痛${oldname}.old-${ver}
- 在配置文件中有一个明确的版本标识符。在他们身上留下指纹真是一件(容易出错的)痛苦事
- 考虑使用一个可以在不同版本之间更新的工具。这将比阅读旧版本并尝试应用它们更容易。
- 我可能更容易单独执行每个版本步骤,但这可以使转换更少“无损”。一个快乐的混合是从一个版本到另一个版本进行小的更新,但有“检查点”的大的升级,可以直接跳到最新的(或最新的“检查点”)。这有点像偶尔使用完整备份快照
- 随时通知用户。如果您更改系统管理员的设置,他将不会高兴。您可能希望使流程具有交互性,或者将注释放入每个添加/移动/删除设置的文件中。我还建议在文件的某些部分保留删除的设置,以供用户参考。(记下它们为什么也在那里)
- 备份旧文件。您的脚本将崩溃,并将吃掉数据。执行类似于命名当前文件的操作
。在文件的不同部分保存设置并不总是足够的,这将为用户省去很多心痛${oldname}.old-${ver}
- 这并不是一个简单的解决方案,但我这里有一些事情要做/考虑。每种情况都会有所不同