为什么Facebook Flux上的action creator不能接触商店?

为什么Facebook Flux上的action creator不能接触商店?,facebook,store,flux,Facebook,Store,Flux,我正在阅读有关Facebook流量的文章,我喜欢这种模式,但我不明白为什么我们需要让商店不受action创建者的影响。Facebook只说这是“关注分离”的一部分,只有商店应该知道如何修改自己。Facebook不同意像“setAsRead”这样的商店设置程序,但是通过在商店中捕获的调度程序触发action creator上的事件不是几乎相同的事情吗?调用类似“setAsRead”的东西并不会暴露存储是如何修改自己的 有些人说,这会导致存储和操作创建者之间的耦合,但在dispatcher上触发事件

我正在阅读有关Facebook流量的文章,我喜欢这种模式,但我不明白为什么我们需要让商店不受action创建者的影响。Facebook只说这是“关注分离”的一部分,只有商店应该知道如何修改自己。Facebook不同意像“setAsRead”这样的商店设置程序,但是通过在商店中捕获的调度程序触发action creator上的事件不是几乎相同的事情吗?调用类似“setAsRead”的东西并不会暴露存储是如何修改自己的

有些人说,这会导致存储和操作创建者之间的耦合,但在dispatcher上触发事件会导致发布/订阅、存储和操作创建者之间的耦合

让商店不受动作创建者的影响会产生“等待”的需求。等待链不会在商店之间产生更多的隐式耦合吗?如果某个动作需要在某个给定的顺序上进行存储交互,为什么不在动作创建者上进行此操作


你们知道Facebook Flux采用无调度方式的缺点吗?

如果你在商店中实施setter,你将彻底打破单向数据流原则,这可以说是Facebook Flux的核心原则。没有任何东西可以阻止组件或任何其他代码直接操作存储的状态。现在,数据突变不再仅仅来自于对行为作出反应的存储,因此您有许多“真相来源”

单向数据流原理如下所示,在本讨论中非常简化:

Actions ----> Stores ----> Components
   ^                           |
   |___________________________|

waitFor
实际上确实在存储之间创建了一个耦合,它泄漏到必须提供
waitFor
功能的调度程序中。它可以说是“普通”流量模式中比较有争议的一点,例如,在没有中央调度器的情况下以不同的方式实现它。

如果您在商店中实现setter,您将完全打破单向数据流原则,这可以说是流量模式的中心原则。没有任何东西可以阻止组件或任何其他代码直接操作存储的状态。现在,数据突变不再仅仅来自于对行为作出反应的存储,因此您有许多“真相来源”

单向数据流原理如下所示,在本讨论中非常简化:

Actions ----> Stores ----> Components
   ^                           |
   |___________________________|
waitFor
实际上确实在存储之间创建了一个耦合,它泄漏到必须提供
waitFor
功能的调度程序中。它可以说是“普通”流量模式中比较有争议的点之一,例如,它以不同的方式实现,没有一个中央调度器