明智地保存和读取更改的配置(存储在XML文件中)

时间:2019-03-08 15:07:20

标签: xml xpath design-patterns

我正在处理一个将其配置(广义上)存储在XML文件中的系统。它还使用户可以覆盖某些参数。现在,如果用户整个更改了配置,则XML文件将随更改而被重写(在用户目录中)。但是,这非常不方便。

假设我们的基本配置如下:

<configuration>
    <groupOfProperties>
        <someProperty>Sample value</someProperty>
        <otherProperty>Sample other value</otherProperty>
    </groupOfProperties>
</configuration>

它已被用户覆盖,现在更改为以下形式:

<configuration>
    <groupOfProperties>
        <someProperty>Changed value</someProperty>
        <otherProperty>Sample other value</otherProperty>
    </groupOfProperties>
</configuration>

这很酷,没有问题,除非我们的基本配置由于某种原因而更改。例如-添加了一个新参数:

<configuration>
    <groupOfProperties>
        <someProperty>Sample value</someProperty>
        <otherProperty>Sample other value</otherProperty>
        <newProperty>Sample new value<newProperty>
    </groupOfProperties>
</configuration>

现在,用户不知道该更改,并且某些读取XML文件的黑匣子不会获得新的属性,这些属性在基础中已更改。但是,我们可以安全地假设不读取其中的某些事实是故障安全的,并且仅影响系统的功能层。

有什么方法可以智能保存更改后的XML(最好是更改的部分),并轻松地将其与基础文件“合并”,同时处理请求以获取一定价值?

我想我实际保存的不是XML文件,而是某种补丁(https://tools.ietf.org/html/rfc5261)。然后,在读取某些属性时,我基本上会读取基本文件并对其应用补丁以获取“真实”配置?

我不是在寻找一种非常精确的实现方式,而是在寻求解决该问题的通用方法以及一些解决方案。

非常感谢您的回答!

P.S。在实际系统中,XML文件比给定的示例复杂得多。

P.S.2不幸的是,XML文件(或任何其他平面文件)是该系统的唯一方法。我们可以称之为技术债务。

1 个答案:

答案 0 :(得分:0)

将数据更改捕获为一系列补丁的一般解决方案称为Event Sourcing。它允许通过应用所有先前的补丁程序来计算当前数据状态,并且还可以审核任何先前的状态。这种模式的典型例子是版本控制系统。