1

我使用的 API 公开了具有不同特征的数据:

  • “静态”参考数据,即您要求它们,得到一个据说不会改变的值
  • “历史”值,您可以在其中查询日期范围
  • “订阅”值,您可以在其中注册以接收更新

但从语义上看,这些字段是一回事,只是消费方式不同。参考数据可以被视为一个常数函数,随着时间的推移产生相同的结果。历史数据只是过去发生的流数据。

我试图找到一个统一的模型来对我的查询的所有语义进行编程,并将其与其消费模式区分开来。

这意味着,可以以“实时”方式评估相同的报价,将字段转换为适当的 IObservable 形式(如果可用),或者以“历史”方式,将“时钟”作为参数并在以下情况下产生值勾选或“参考”方式,仅产生 1 个值(仍由运行查询的历史日期修饰..)

我不确定 F# 中的哪些编程工具最适合该目的,但我正在考虑引用,我从未真正使用过。它是否适合这样的任务?

4

2 回答 2

0

我做了一些非常相似的事情(不是静态案例,而是流媒体和历史案例),并且IObservable绝对是适合这项工作的工具。实际上,IEnumerable它们IObservable是双重的,大多数东西你可以为一个写,你也可以为另一个写。但是,基于推送的模型 ( IObservable) 更灵活,并且作为一部分的运算符Rx比常规IEnumerableLINQ 中的运算符更完整和更合适。

使用引号只是意味着您需要从头开始构建上述内容。

您会发现以下内容很有用:

  • Observable.Return(value)对于单个静态值
  • list.ToObservable()用于将历史可枚举项转换为可观察项
  • 直接IObservable将值流式传输到 IObservable

另请注意,如果有帮助,您可以使用虚拟调度程序来勾选可观察对象(上述大多数都接受调度程序)。我想这就是你想要的历史案例。

http://channel9.msdn.com/Series/Rx-Workshop/Rx-Workshop-Schedulers

于 2012-05-03T04:46:25.633 回答
0

你自己说的:就用 IObservable

  • 您的静态案例只是 OnNext 1 值
  • 在您的历史案例中,您 OnNext 为查询中的每个值(在注册观察者时立即)
  • 订阅案例只是普通的 IObservable 模式——你不需要像这样的引用。
于 2012-05-02T13:02:34.037 回答