1

我正在寻找一种数据结构或设计模式来处理轨道和活动记录,以提供一种基于实时事件制作可配置事件和事件触发器的方法。

虽然这不是此类系统的最终用途,但我相信以下示例演示了我正在尝试做的事情。类似于 splunk 之类的日志监控系统,基本上我要做的是创建一个系统,我可以在其中从对象中获取一些属性,然后将其与所需值进行比较,如果评估为真,则执行操作。

是否有图书馆可以做到这一点,或者需要从头开始推出一些东西。我考虑设计它的方式类似于以下内容:

我会有一个 Actor(不是传统的并发意义上的)来容纳我想要比较的属性。然后我会有一个 Trigger 模型,它有一个指向 actor_id、属性(IE 计数)、比较器(<、<=、==、>=、>)、value 和 action_id 的指针。action_id 将指向一个具有 perform 方法的对象,该方法仅包含触发触发器时需要运行的代码。

所以最后触发器将评估为:

action.perform if actor.send(attribute) comparator value

另一种选择,可能是更标准的选择,似乎开发了一种 DSL(Facebook 的 IE FQL)。这会是一种更好、更灵活的方法吗?

这是图书馆可以处理的事情,或者如果不是,这对于像我提议的系统这样的系统来说是一个体面的结构吗?

编辑:看起来 DSL 可能是最灵活的方式。用 Ruby 编写 DSL 的教程

4

1 回答 1

1

如果我正确理解了这个问题,那么您所写的内容几乎是正确的。您可以将比较运算符作为符号发送,如下所示:

comparator = :>
action.perform if actor.send(attribute).send(comparator, value)
# action will perform if actor's attribute is greater than value
于 2013-04-02T07:24:36.353 回答