我可以有这样的助焊剂动作:
{type: 'KILL', payload: {target: 'ogre'}}
但我没有看到在这样的类(包装商店)上有一个方法之间有什么区别,
People.kill('ogre')
如果人们是行动的唯一接收者?
我看到助焊剂调度员给了我两个好处(可能)
"kill"方法可以广播到多个未知接收器(好!)
调度员给我一个方便的地方记录所有行动交通(也很好!)
这些可能是好事,但还有其他原因让我失踪吗?
我没有看到的是如何以JSON对象的形式放置动作,突然强制或帮助"单向"通信流程,这是我在任何地方阅读的是具有动作和流量的巨大优势.
在我看来,无论我如何给猪打气,我仍然有效地将信息发回商店.当然行动现在经历了几层间接(动作创建者,调度员)到达商店之前,但除非我遗漏了一些事情,为所有实际目的发送该动作的组件正在更新任何正在监听的商店.杀死消息.
我在这里缺少什么?
我再次在Stack Overflow上知道我们不能问一般问题,所以我想保持这个非常具体.具有不同语法的两个代码片段在语义上(除了广播到多个商店的可能性之外)看起来完全相同.
再次,如果唯一的原因是它启用广播并为调试目的启用单点流量,我很好,但是想知道是否还有其他关于flux /调度程序的事情我错过了?
磁通式架构的主要特征大致如下:
商店是应用程序状态的唯一真实来源
只有动作才能触发商店状态的突变
存储状态不应该直接变异,即通过分配对象值,而是通过克隆/解构来创建新对象
就像节食一样,使用这种类型的建筑实际上如果你滑倒并且间歇性地回到原来的方式就行不通.
回到你的例子.这里使用动作的好处不是广播或记录方面,而是简单地说,People
该类应该只能消费来自商店的数据并表达其希望通过动作改变所述商店的状态.想象一下,例如,Elves
想要对食人魔唱歌,因此有兴趣知道所说的食人魔还活着.同时,People
想要礼貌,不希望在小夜曲时杀死食人魔.磁通式架构的好处很明显:
class People { kill(creature) { if (creatureStore.getSerenadedCreature() !== creature) store.dispatch({ type: 'KILL', payload: { target: creature } }) return `The ${creature} is being serenaded by those damn elves, let's wait until they've finished.` } } class Elves { singTo(creature) { if (!creatureStore.getCreatures().includes(creature)) return store.dispatch({ type: 'SING_TO', payload: { target: creature } }) return `Oh no, the ${creature} has been killed... I guess there will be no serenading tonight..` } }
如果类People
要包装商店,那么你也需要Elves
该类包装同一个商店,创建两个相同状态将以某种方式变异的地方.现在想象一下,如果有其他10个类需要访问该商店并想要更改它:添加这些新功能正在变得很痛苦,因为所有这些类现在都受到其他类从它们下面改变状态的摆布,迫使你处理大量边缘情况,甚至可能与这些类的业务逻辑无关.
使用flux风格体系结构时,所有这些类将仅使用来自creatureStore
和基于该状态的调度操作的数据.商店处理将不同的操作与州协调,以便其所有订户在正确的时间拥有正确的数据.
当您只有一个商店被一个或两个实体消耗时,这种模式的好处可能并不明显.如果您有数十(或数百)个存储器,其中包含数十(或数百)个组件,每个存储器消耗来自多个存储的数据,这种架构可以让您更轻松地开发新功能而不会破坏现有功能,从而节省您的时间和金钱.
希望这个墙上的文字有助于澄清!