【发布时间】:2012-04-17 19:01:57
【问题描述】:
您将如何使用响应式扩展构建一个简单的模拟引擎?例如,假设您有一个类Motor,其属性为IsPowered 和Speed。您希望通过让 Speed 从 0 到 1000 RPM 以每秒 10 RPM 的速度上升 100 秒来对 IsPowered 从 false 变为 true 做出反应。
稍微抽象一下,假设您想提供一个可插入的 API,其中类及其属性事先不知道。相反,模拟引擎会获得可观察的属性变化流,通过创建额外的属性变化来做出反应,其中许多变化是利用 Rx 随时间递增发生的。这样的 API 可能是什么样的?
【问题讨论】:
-
您希望引擎轮询属性的更改,还是模型会公开事件或可观察对象以通知更改?
-
模型将公开属性(例如
IsPowered)已更改的事件或可观察对象。 (至于哪个事件或可观察的更好,这是我正在寻找的指导的一部分。) -
那么,在您的示例中,
Motor类将具有IsPoweredObservable和SpeedObservable属性(或等效事件)以及IsPowered和Speed属性? -
是的,按照这些思路。对于使用属性更改,我认为您会根据IObservable/IObserver Development Model 公开
IObserver而不是IObservable。将两者结合起来并抽象出属性,像Subject<PropertyChange>这样的东西会起作用吗? -
不要暴露观察者 - 任何杂散的代码都可以调用
OnCompleted或OnError并将您的应用程序变成糊状。对象也是观察者,所以也不要暴露它们。
标签: simulation system.reactive