Flux&React中的单位转换,权限和其他转换

问题描述:

直接点:单位转换(用于显示&输入),权限检查和其他演示相关转换等行为属于Flux体系结构中的行为?Flux&React中的单位转换,权限和其他转换

在我们的情况下,“其他演示相关变换”的一个例子是运用用户布局设置的图。例如,用户可以定义在摘要视图中查看哪些数据字段,以及以何种顺序查看这些字段。

我们认为我们理解这个问题的解决方案的一部分:这些转换是应用程序状态和生活在不同的国营商店(“WeekSummaryLayoutStore”,“UnitPreferencesStore”)。很容易理解设置/获取,编辑和检索这些状态的流程。

我们所希望探讨的是在何处应用这些国家获得最终呈现的结果,并对准通量架构。我们已经想出了多种选择:

1)反应成分的Mixin处理之类的东西在每个叶组件的“渲染”方法单位转换。各种演示状态存储都被插入到组件的构造函数中,并且Mixin自动地连线(听各种状态存储,更新等)。

2)使用一个中间存储库WeekSummaryPresentationDataStore,它侦听WeekSummaryDataStore,WeekSummaryLayoutStore和UnitPreferencesStores,并吐出最终的表示数据;该组件然后监听适当的*** PresentationStore并处理更新&呈现与其他商店一样的呈现。

3)整合所有的转换在原始数据存储和让商店只吐出演示的数据。

争论/反对每个?

1)最终叶组件应该知道如何“存在”的数据的唯一模块。可以说,单位转换,应用布局以及根据权限确定数据细节是此演示逻辑的一部分。几个额外的层,但很好地解耦,原始数据存储不需要知道任何关于进一步转换。每个商店的核心业务逻辑可以在各个组件之间重复使用,每个组件随后可以基于不同的呈现状态存储库呈现不同的数据。

2)增加了什么的复杂性?

3)可以说,一些表示逻辑是业务逻辑的一部分,可以由核心数据存储拥有。显着降低复杂性,但是如果组件需要相同的核心存储,但是呈现状态不同,则可以复制业务逻辑。

想法?

如果您的转换是“纯”功能,那么他们可以住在Utils模块中。例如,DateTimeUtils。我的意思是在功能编程意义上的“纯粹”:无状态的,不需要通过方法参数传入的任何有状态信息。相同的输入始终导致相同的输出。

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

你可以创建视图层一个mixin相反,肯定的。但我个人更喜欢静态方法Utils模块来混合,因为它更容易理解方法的定义。

至于是否应存储转换,我想你也许不应该,但是这可能是东西,需要根据具体情况逐案进行决定。这感觉就像紧密结合你的视图和数据层,他们应该更独立地操作。