我的应用程序的一部分的设置是这样的:
设备从一个或多个数据源获取数据。用户与一个或多个设备交互。现在,dataSources 提供实时数据,这些数据会定期按设备获取,然后显示。所以结构可以显示为:
User <-----> (Appliance1, Appliance2) <------> ((DataSource1, DataSource2), (DataSource1, DataSource3, DataSource4))
请注意,数据源可能会重叠。所以它是一个两层的重叠设计。
目前,操作设置如下(代码在语法上不是 100% 正确 - 只是一个设计问题):
ComponentContainer {
...
componentDidMount() {
this.setInterval(() => {
this.props.appliances.forEach(appliance => dispatch(fetchApplianceRealtime(appliance))
}, 4000))
}
}
// in src/actions/appliance.js
fetchApplianceRealtime(appliance) {
return (dispatch, getState) => {
fetchApplianceRealtimeInit(appliance) // I may want to toggle a flag here
const promises = appliance.dataSources.map(ds => return dispatch(fetchDataSourceRealtime(ds)))
Promise
.all(promises)
.then(() => {
dispatch(fetchApplianceRealtimeDone(appliance))
})
.catch(() => {
dispatch(fetchApplianceRealtimeFail(appliance))
})
}
}
// in src/actions/data-source.js
fetchDataSourceRealtime(ds) {
return (dispatch, getState) => {
// No need for Init() action as data sources dont need their own fetching flag or something.
return fetch(...)
.then(resp => {
// normalize
return dispatch(fetchDataSourceRealtimeDone(ds, entities)
})
.catch(error => {
return dispatch(fetchDataSourceRealtimeFail(ds, error)
})
}
}
那么,这是一个体面的设计吗?我强烈觉得我在这里错过了一些功能。给定场景,动作嵌套是最好的方式吗?这里可以进行任何其他改进吗?
更新:我在这里面临的一个问题是fetchDataSourceRealtime
在fetchApplianceRealtime
.
现在我有一种感觉,我只是从错误的角度看待这个问题。