我正在处理一个将其配置(广义上)存储在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文件(或任何其他平面文件)是该系统的唯一方法。我们可以称之为技术债务。
答案 0 :(得分:0)
将数据更改捕获为一系列补丁的一般解决方案称为Event Sourcing。它允许通过应用所有先前的补丁程序来计算当前数据状态,并且还可以审核任何先前的状态。这种模式的典型例子是版本控制系统。