Angular,Central(Redux)’Store’与Singleton Service,又名“分
在我们为新的Angular项目做准备时,我们正在评估在我们的系统中采用的各种架构概念 – 尤其是状态管理.在过去,主动通知客户端组件存在自然的复杂性.今天,进入反应式编程和中央商店.
我理解维护“大型”中央存储的本质,其中包含相应的操作(在各种服务中),reducer和包含整个应用程序状态的订阅者.我也看到了使用这些纯函数减速器进行分层单元测试的好处.我的问题是,这是如何与“关注点分离”和“单一责任”的经典概念相结合,其中通过其专用服务(依赖注入)为这些组件维护状态,同时提供了相似的解耦? 为什么使用大型中央存储而不是单一服务来维持“包含”状态,这些服务会对订户进行更改并保持关注点分离(例如:客户数据与库存数据分开).虽然在SO和网络的其他部分都有这样的暗示,但我没有看到直接解决这个问题的参考文献.比较这两个概念(中央商店状态与依赖注入服务/单身状态)和/或做出的参考的想法非常受欢迎.
在您的Angular旅程中,问自己关于项目架构的问题肯定是一个良好的开端.
使用AngularJs(v1.x)我真的不知道什么是以反应方式工作的最佳模式,并确保每个组件都可以在服务中的某个地方订阅数据,如果另一个组件称为服务来更新某些数据,其他组件会更新. 6~8个月前,我发现Redux并发现这种方法非常有趣.我决定深入研究集中存储的概念,包括纯函数和不可变数据.这是我做过的网络开发人员的最佳选择之一.您可以在任何框架之外使用Redux.因此,即使我必须使用JQuery做一个示例并维护大量数据,我也使用Redux. 我真正喜欢Redux的一件事是规范化我的数据并将它们操作为数据库,例如缩减器操作表.带有选择器的“Computed view”也是一种强大的方式,可以根据需要从原始“表格”中编写数据.
好吧,当您标记ngrx时,我可以想象您计划将它与Angular(v2或)一起使用,并且关注点的分离很棒.你通过Reducer拆分逻辑来操作表,但是如何制作ajax调用呢?对于那种副作用,你应该使用ngrx/effects.所以你仍然会有你的减少服务.效果将允许您对给定操作的调度作出反应. 例如,如果您使用FETCH_USER类型调度操作,则在简化器中只需将布尔值isFetchingUser切换为true(因此您可以在视图中显示微调器).然后从user.effect.ts(这是一个服务),您可以捕获FETCH_USER操作并调用您的后端.响应到达后,从效果中调度一个动作FETCH_USER_SUCCESS,并将来自ajax调用的数据传递给动作有效负载. 如果你想查看一些代码,我在Github上创建了一个名为Pizza-Sync的演示.它使用@ ngrx / store和@ ngrx / effects与规范化数据. 如果您有Chrome或Firefox Redux devtools扩展,您可以查看商店和操作. 希望它有所帮助,如果您有其他问题,请告诉我. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |