我的应用程序片段的设置是这样的:
设备从一个或多个dataSource获取其数据。用户与一个或多个设备交互。现在,dataSources提供实时数据,每个设备定期获取然后显示。所以结构可以显示为:
ScanFilter filter = new ScanFilter.Builder().setDeviceAddress(deviceMacAddress).build();
filters.add(filter);
请注意,数据源可能会重叠。所以它是一个两层重叠的设计。
目前,操作设置如下(代码在语法上不是100% - 只是一个设计问题):
User <-----> (Appliance1, Appliance2) <------> ((DataSource1, DataSource2), (DataSource1, DataSource3, DataSource4))
那么,这是一个体面的设计吗?我强烈地觉得我错过了一些功能。考虑到场景,动作的嵌套是最好的方法吗?可以在这里进行任何其他改进吗?
更新:
我在这里面临的一个问题是在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
次调用中传播提取错误。
现在我有一种感觉,我只是从错误的角度看待这个问题。