3

我从事过具有非常复杂的 XML 配置的项目,面临的一个问题是维护 XML 的内部一致性。

在这种情况下,我指的不是严格的 XML 模式一致性,而是使用的节点之间的更高级别的关系。大多数问题是由以 XML 编码的信息之间的隐式链接以及该信息与代码库的隐式关系引起的。示例可能是:

  • XML 节点数据隐式链接到代码中的枚举
  • 相同配置中相关的业务对象(因为它们共享需要一致的信息),它们之间没有任何明确的关系
  • 要在运行时编译和解析的 XML 中的代码

让我感到震惊的是a)这可能成为一种增加频率的做法,b)在某些情况下,我们隐含地创建了一种新的编码语言,它没有在编译时检查——实际上在它运行之前几乎没有检查。

是否还有其他人面临类似的情况,是否有任何工具或方法可以使问题更容易处理?我想要一些与技术无关的一般示例——我自己的具体经验是使用 C# 和专有系统的配置。

注意:尽管我在下面对此有答案,但我无意将自己的答案作为最终答案。

4

4 回答 4

2

我使用自动化功能测试来确保我们工作中默认配置的数据完整性。我不知道您描述的问题是否一定取决于配置格式为 XML。话虽如此,我建议:

  • 您不使用 XML 作为配置格式。(谷歌可以给你原因)
  • 通过隐式使用枚举或任何其他构造值的紧密耦合在配置中与在代码中一样糟糕。
  • 从配置中提取并执行的代码让我感到畏缩。它是否在配置中以便可以覆盖?如果是这样,那将是错误、未定义行为和潜在安全问题的巨大载体。
  • 业务对象问题听起来也像是糟糕的紧密耦合。

您可能无法对 XML 作为配置格式、不良耦合或从配置执行代码做任何事情。您可以通过创建一套功能测试来降低风险,以确保:

  • 枚举是有效的
  • 该代码是可编译的、可执行的,不包含 evals、rpc 调用、不调用函数或您要添加的任何其他分析检查。

您有时还可以通过提供替代方案(配置或配置条目)来帮助更改。

于 2010-12-14T17:24:08.613 回答
2

你试过 Schematron 吗? http://www.schematron.com/

它是一种高级语言,旨在从语义上验证 XML,而不仅仅是在语法上。

另见维基百科:http ://en.wikipedia.org/wiki/Schematron

于 2010-12-14T09:05:49.230 回答
2

这将很大程度上取决于您用于项目的语言/框架/工具。

使用 XML 进行配置可能真的有问题,因为它无法在编译时进行检查。

例如,在使用 Java 和Spring Framework时,有一个名为Spring Tool Suite的 Eclipse 插件,它可以在 XML 配置和实际代码之间进行同步检查。

但这只是特定语言和特定框架的一个示例。您应该尝试找出您的场景是否存在类似的东西。

顺便说一句,如果您让我们知道您正在使用什么技术,我们或许可以为您提供更多帮助。

于 2010-12-09T09:26:03.983 回答
1

@David Peleg 的一个很好的链接是 Topogi 它提供检查 XML 的产品,包括“业务规则”检查。

于 2010-12-14T09:57:24.743 回答