1

我的应用程序的一部分的设置是这样的:

设备从一个或多个数据源获取数据。用户与一个或多个设备交互。现在,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)
            })
    }
}

那么,这是一个体面的设计吗?我强烈觉得我在这里错过了一些功能。给定场景,动作嵌套是最好的方式吗?这里可以进行任何其他改进吗?

更新:我在这里面临的一个问题是fetchDataSourceRealtimefetchApplianceRealtime.

现在我有一种感觉,我只是从错误的角度看待这个问题。

4

0 回答 0