design-patterns - 寻找合适的术语:审计?可追溯性?记录?
问题描述
我有个问题。我确定人们已经解决了它,但我不知道要搜索的正确术语。我想在这里描述这个问题,也许你可以用术语帮助我。
我们正在构建以批处理方式处理数据的软件,我们希望让用户能够在事后了解为什么以特定方式处理数据。在一个非常基本的层面上,我们处理记录,然后我们有很多条件,并根据条件我们做一些事情。并且用户希望看到类似“因为满足条件 X,所以我们做了 Y”之类的内容。
让我尝试提供一个示例,而不是我们正在处理的实际问题:假设我们正在构建一个新闻网站,并且我们从新闻机构导入文章和图像。现在可能发生的事情有:
- 我们跳过了一篇文章,因为标题以“META:”开头,表明这是新闻机构给编辑的信息,而不是实际的读者。
- 我们将一篇文章归入 X 类,因为该通讯社属于 Y 类。
- 我们将一篇文章放入类别 X 是因为通讯社没有提供类别,但它确实提供了标签 Y。
- 我们将文章 X 与图片 Y 联系起来,因为两者都有相同的主题标签 Z。
用户可能会问的问题:
- X条怎么了?(它来自新闻机构的文章 Y,这是我们对此做出的所有决定。)
- 有多少文章因为是元而被跳过?
- 在昨天导入的文章中,有多少与图像相关联?
- 在昨天导入的图像中,有多少与文章相关联?
同样,这个问题域只是一个例子,我只是在寻找正确的搜索词来查找文献中的信息。
我想到了“可追溯性”,但这似乎是特定于作为特定构建一部分的软件工件。
我想到了“审计日志”,但不知道审计日志是否支持回答这类问题。
我想到了“决策制定”,但这似乎是人类在组织软件开发时所做的事情。还有决策支持软件,用于编纂规则。但我们正试图处理我们所拥有的特定输入的此类规则的结果。
解决方案
这听起来像是某种logging,尽管instrumentation、tracking等可能是其他术语。我不确定是否有一个行业公认的术语,但从技术上讲,这些在实现上都非常相似。
说到日志,我建议区分纯函数和不纯动作,然后只记录不纯动作。结果是可重复执行。在这种情况下,这意味着您可以随时重播发生的所有事情。由此,您可以根据需要生成报告。
这种架构的另一种选择是为您想要报告的那些决策定义一种内部特定于域的语言。例如,您可以将决策与效果分开,使核心引擎返回一个包含所有决策的数据结构。然后,您可以(至少)在同一数据结构上运行两个不同的解释器:一个执行实际工作,一个创建决策报告。
您也可以考虑研究现有的(可能是商业的)基于规则的系统。如果您能找到一个足够接近您的问题的解决方案,您也许可以省去很多工作。
推荐阅读
- javascript - 文本区域中的实时计数行
- python - 如何解决这个问题?def _create_frequency_table(text_string)->dict: ^ SyntaxError: 无效语法
- matlab - 如何在 MATLAB 中显式地制作数组的深层副本?
- javascript - 输入字段长度小于 7 时清除字段中的所有值
- python - @pyqtSlot() 与另一个装饰器一起使用时会导致调用错误的处理程序方法
- python - 如果列中存在值,如何从另一个表中填充列值然后分配一个字符串,如果不使用熊猫分配其他字符串
- java - 如何从活动中收听乐天动画结束
- javascript - 参数连接问题。我该如何处理
- javascript - 节点js对象中未定义的元素
- swift - Reality Composer 中创建的“行为”存储在 .rcproject 中的什么位置?