实现虚幻、Blender、Alteryx等基于节点的工作流程的一般原则?



这个话题很难谷歌,因为"node"(不是node.js)和"graph"(不,我不是想做图表)。

尽管我是一个非常全面和经验丰富的开发人员,但我无法拼凑出这些类型的编辑器如何以合理的方式,以合理的顺序,从一个节点到另一个节点获取数据的心理模型。特别是在 Alteryx 示例中,因为例如,排序模块在继续之前需要其整个上游数据集。并且某些节点可以将单个输出发送给多个下游使用者。

我能够理解树和我当时旧数据结构课程中没有的内容,并成功地理解和适应了真实项目中 https://www.python.org/doc/essays/graphs/的基本图概念。但这是一个静态结构,数据不会在节点之间传递。

我应该从哪里开始和/或我缺少什么概念,我可以使用这样的东西来实现这样的东西?让用户将一些框链接在一起,通过一些基本操作(如排序和连接)对文本文件或数据记录进行切片和切块?我使用的是 C#,但答案应该是与语言无关的。

这种范式称为数据流编程,它处理从指令传递到要处理的指令的数据流。

数据流程序可以以文本或视觉形式编程,除了您提到的软件之外,还有很多程序包含某种数据流语言。

若要创建自己的数据流语言,必须:

  1. 创建代表处理节点的程序模块或对象,实现不同类型的数据处理。处理节点通常有一个或多个数据输入和一个或多个数据输出,并在其中实现一些数据处理算法。节点还可能具有控制给定节点如何处理数据的控制输入。典型的数据流算法从一个或多个输入数据流值计算输出数据样本,例如 FIR 滤波器。然而,处理算法也可以像IIR滤波器那样具有数据值反馈(输出值以某种方式与输入值混合),或者以某种方式累积值以计算输出值
  2. 创建用于在处理节点之间传递数据的标准 API。对于不同类型的数据和控制信号,它可能有所不同,但它必须是标准的,因为处理节点应该相互"理解"。数据通常作为纯值传递。控制信号可以是普通值、事件或更高级的控制语言 - 具体取决于您的需求。
  3. 创建排列以链接节点并在它们之间传递数据。您可以创建自己的程序机制或使用一些标准的东西,如pipesmessage queues等。例如,此函数可以实现为树状结构,其节点是处理节点,并具有对下一个节点及其适当输入的引用,这些输入处理来自当前节点输出的数据。
  4. 创建某种节点迭代器,该迭代器从数据流图的开头开始,并循环访问每个处理节点,其中:
    • 提供下一个数据输入值
    • 调用节点数据处理方法
    • 更新数据输出值
    • 将更新的数据输出值传递给下游处理节点的输入
  5. 创建用于配置节点参数和节点之间链接的工具。它可以只是使用文本编辑器编辑的简单文本文件,也可以是具有绘制数据流图GUI的复杂可视化编辑器。

关于您在AlteryxSort模块的说明 - 也许数据值只是在此模块中累积然后排序。

在这里,您可以找到Dataflow编程语言的更详细描述。

最新更新