0

我有一些代码正在阅读并处理数十个输入源。目前,输入主要是带有一些特殊字段的 CSV,但 CSV 文件的完整结构和内容取决于输入源。有人建议,每种输入类型有时都需要特殊处理来“修复”输入的某些已知问题。但是,需要做什么(如果有的话)将根据每个输入源的独特问题而有所不同,需要为每个输入源进行的错误检测之间没有共同点。我的代码最终将希望能够进行这些类型的错误更正,如果我遇到新问题,我应该也能够让我的代码开始更正新问题。

显然,这并不容易解决,因为在将其交给我之前,我并不确切知道需要运行什么逻辑。我的经理(不是开发人员)暗示他会在收到的每个独特逻辑中硬编码,但显然我不喜欢这个选项。但是,如果我想避免大量晦涩难懂的硬编码逻辑,我需要某种配置方法,它允许开发人员定义某种通用概念来测试输入并可能修改/纠正已知的错误字段。

此外,我的程序将在流数据上连续运行。理想情况下,我有一种方法可以在代码中添加一种新形式的纠错,而无需停止/重新启动它。

那么,让我的代码为每个源配置此类通用逻辑的最佳方法是什么?想到的选项是在我的配置文件中有某种“语言”,这将允许开发人员说“如果 field3 > field2 丢弃”之类的话,这似乎很难开发并且仍然不会自动更新,除非我时不时有我的代码,然后返回并检查配置文件是否有更改。或者可能有一个共享对象,其中包含这些类型的检查,开发人员可以在每次有人向我们提供需要解决的新问题时添加新的错误检查功能;但这仍然仅比硬编码逻辑高出一步。

关于最佳设计方法的任何建议?任何现有的图书馆可以为我做部分工作吗?我正在使用纯 C++(不是 C++11)。

编辑:谢谢大家的意见,但我没有提到一个主要细节。这一切都发生在重负载的流处理期间。所以我需要确保我选择的任何方法都没有太大的开销来运行。我会考虑尝试合并脚本语言,但我担心它可能会“花费”太多。

4

2 回答 2

0

你不想在你的程序中混淆这个特殊的“修复”处理。它很可能会导致代码混乱。

有一个预处理步骤,将您的待固定输入转换为您的实际程序的固定输入。这样,您的真实程序只做一件事并保持简单。

您可以有单独的程序来处理每个特定的输入来进行转换。这些程序可以利用跨不同输入可能需要的通用例程。

于 2012-07-10T19:31:16.993 回答
0

我最终决定使用插件架构。每个输入都会在运行时加载它自己的插件。这速度很快,可以很好地封装代码,并且我可以在程序运行时检测新插件和新代码中的热插拔。

于 2012-08-07T21:22:56.237 回答