通量与全局变量(服务中)

时间:2018-03-13 07:57:32

标签: angular design-patterns architecture flux ngrx

我正在开发Angular / NGRX中的flux应用程序。我正在工作的一位实习生表示,他使用角度服务在他的第一个应用程序中存储数据。乍一看,在我看来,这是不正确的方法,但经过一段时间的考虑,我注意到它与助焊剂储存的想法没有多大区别。 您怎么看?这种方法的利弊是什么? 使用ngrx商店,动作,减速器等而不仅仅是普通的角度服务与一些吸气剂/设定者相比更好吗?
谢谢!

1 个答案:

答案 0 :(得分:3)

对我而言,区别在于方便性和一致性。

您可以轻松地将大多数redux原则(不变性,纯函数,可观察性......)应用于角度服务。因此,您可以获得许多与商店相同的好处(可预测的状态变异,可测试性,性能......)。

就方便而言,一些好处比其他好处更容易。例如,使用scan运算符很容易模仿reducer,但是如果你想要在创建投影(createSelector)时得到的memoization,那么这可能需要更多的工作。如果您发现您喜欢调度操作(命令模式),那么您可以创建自己的事件总线。如果您发现自己喜欢优秀的调试工具(Redux DevTools chrome插件),那么您必须编写自己的集成。因此,您应该看看已经在ngrx中编写的工具的好处,确定您真正想要的工具,然后决定自己编写它是否真的值得。

就一致性而言,在许多情况下,其他人将不得不处理“您的”代码。使用行业测试框架有很大好处。它可以防止您重新发明轮子(不正确),通常会有很好的文档(与您的个人框架不同),您可以在社区中找到已经知道它的人或者在遇到问题时可以为您提供支持的人。因此,如果你发现自己走的是写一个简单的可观察服务的道路,你可能想退后一步思考你正在创造的怪物。

Redux不仅仅是一套工具,它还是解决问题的心理框架。拥有这样的框架可以为整个团队的开发实践带来一致性。当技能差距很大时,这一点尤为重要。在框架中,一切都有它的位置,所以你知道在哪里寻找东西。同样,您可以自己定义,只需衡量开发,教学和支持的工作量。

此外,商店是全球性的。虽然你可以创建一个可观察的,单片的,上帝服务,但我希望这不是你的计划(请不要)。您可能正在创建多个较小的可观察服务。全球有利有弊,这取决于你的情况,你是否认为这是一个优势。

但使用商店也需要付出代价。有很多锅炉板(A WHOLE LOT !!!)。另外,我的主要抱怨是,我的消费者被抽出了我的生产者(商店就在他们之间)。所以我可以写任何rxjs魔术,我可以根据订阅(ngrx polling to refresh data when subscribed)来管理获取数据。

所以恕我直言,如果您只需要简单的可观察,可共享的数据,那么使用服务。如果您需要更多,请使用商店。它在很大程度上取决于您的应用程序,但我宁愿只使用一项服务开始,并在需要时将其移入商店。最好的建议来自于反应 - 如何说:

  

“你知道什么时候需要Flux。如果你不确定是否需要它,你就不需要它了。”

进一步阅读:https://blog.angular-university.io/angular-2-redux-ngrx-rxjs/