Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Flux&;中的单位转换、权限和其他转换;反应_Reactjs_Reactjs Flux - Fatal编程技术网

Reactjs Flux&;中的单位转换、权限和其他转换;反应

Reactjs Flux&;中的单位转换、权限和其他转换;反应,reactjs,reactjs-flux,Reactjs,Reactjs Flux,直截了当:在Flux体系结构中,单元转换(用于显示和输入)、权限检查和其他与表示相关的转换等行为属于哪里 在本例中,“其他与表示相关的转换”的一个示例是将用户布局设置应用于视图。例如,用户可以定义要在摘要视图中查看的数据字段,以及查看这些字段的顺序 我们认为我们理解了这个问题解决方案的一部分:这些转换是应用程序状态,存在于各种状态存储中(“WeekSummaryLayoutStore”、“UnitPreferencesStore”)。设置/获取、编辑和检索这些状态的流程已经很好地理解了 我们想探

直截了当:在Flux体系结构中,单元转换(用于显示和输入)、权限检查和其他与表示相关的转换等行为属于哪里

在本例中,“其他与表示相关的转换”的一个示例是将用户布局设置应用于视图。例如,用户可以定义要在摘要视图中查看的数据字段,以及查看这些字段的顺序

我们认为我们理解了这个问题解决方案的一部分:这些转换是应用程序状态,存在于各种状态存储中(“WeekSummaryLayoutStore”、“UnitPreferencesStore”)。设置/获取、编辑和检索这些状态的流程已经很好地理解了

我们想探讨的是如何应用这些状态来获得最终的表示结果,并与Flux架构保持一致。我们提出了多种选择:

1) React component Mixin在每个叶组件的“render”方法中处理诸如单位转换之类的事情。各种表示状态存储被分配到组件的构造函数中,Mixin会自动连接(收听各种状态存储、更新等)

2) 使用中间存储WeekSummaryPresentationDataStore,它侦听WeekSummaryDataStore、WeekSummaryLayoutStore和UnitPreferences存储并输出最终的演示数据;然后,该组件将侦听适当的***PresentationStore,并像处理任何其他存储一样处理更新和渲染

3) 将所有转换集成到原始数据存储中,让存储只吐出可用于演示的数据

赞成/反对的论点

1) 最后一个叶组件应该是知道如何“呈现”数据的唯一模块。可以说,单元转换、应用布局以及基于权限确定数据细节是此表示逻辑的一部分。几个额外的层,但很好地解耦,原始数据存储不需要知道任何关于进一步转换的信息。每个存储的核心业务逻辑可以跨组件重用,然后每个组件可以根据不同的表示状态存储以不同的方式表示数据

2) 增加了什么的复杂性

3) 可以说,某些表示逻辑是业务逻辑的一部分,可能属于核心数据存储。显著降低了复杂性,但如果组件需要相同的核心存储但不同的表示状态,则允许复制业务逻辑


想法?

如果您的转换是“纯”函数,那么它们可以存在于Utils模块中。例如,DateTimeUtils。我指的是函数编程意义上的“纯”:无状态,不需要任何不通过方法参数传递的有状态信息。相同的输入总是导致相同的输出

UTIL是静态函数的集合,没有特定于应用程序的依赖项(尽管WebAPIUtils模块是该规则的一个显著例外,因为它需要API调用所需的存储中的所有数据)。这些无应用程序依赖关系的UTIL模块现在可以在任何需要它们的组件或存储中使用

当然,您可以为视图层创建一个mixin。但我个人更喜欢静态方法Utils模块,而不是mixin,因为这样更容易理解方法的定义位置

至于是否应该存储转换,我认为可能不应该,但这可能需要根据具体情况来决定。这感觉像是将视图层和数据层紧密耦合,它们应该更独立地运行