【发布时间】:2015-07-25 03:03:40
【问题描述】:
我目前正在开发相当复杂的基于 Arduino 的产品(有很多传感器和设备控制)。在对响应式编程进行了简短的体验后,我认为它是正确的选择。从你那里,我想知道你对我的想法的看法。
我的第一个想法是将流分为两种类型 - 输入和输出。
输入流通常是一些传感器(温度、压力),它只返回一个值(°C、Pa)。
输出流是返回引脚状态(数字为 0 或 1,模拟为 0 到 1023)的设备(风扇、热交换器)。
如果我只想在温度高于 100 °C 时打开风扇,代码可能如下所示:
const FAN_PIN = 10
let temperatureInput = ds18b20(...)
let fanOutput = (sensor) => {
return sensor.map((value) => {
return value > 100
})
}
fanOutput(temperatureInput).onValue((digital) => {
digitalWrite(FAN_PIN, digital)
})
我的第二个想法几乎是一样的,但我使用Immutable.js 和它的Cursors 作为输出,所以同样的例子看起来像这样(我很抱歉如果代码不正确,我对游标还没有太多经验):
const FAN_PIN = 10
let state = Immutable.fromJS({
fan: {
active: false
}
})
let fanCursor = Cursor.from(state.get('fan'), nextData => {
state = state.set('fan', nextData)
digitalWrite(FAN_PIN, nextData.get('active'))
})
ds18b20(...).onValue((value) => {
fanCursor.set('active', value > 100)
})
我更喜欢第二种解决方案,因为它在一个地方有状态,但是我在组合流和游标时遇到了问题。在第一个解决方案中,我不知道将 Output 表示为流是否明智(可能很难做一些复杂的工作)。
您有什么改进或更好的想法?
【问题讨论】:
-
我目前正在使用Kefir 进行直播。
-
没关系,Kefir 的 API 和培根基本一样。
-
我并没有真正看到为此使用 immutable.js 游标的好处 - 你的第一个例子比第二个例子更清楚。您有需要帮助的问题吗?
标签: javascript functional-programming arduino reactive-programming immutable.js