Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角形、中央(重排)和#x27;商店';vs单身服务,又名;“关注点分离”发生了什么;?_Angular_Ngrx - Fatal编程技术网

Angular 角形、中央(重排)和#x27;商店';vs单身服务,又名;“关注点分离”发生了什么;?

Angular 角形、中央(重排)和#x27;商店';vs单身服务,又名;“关注点分离”发生了什么;?,angular,ngrx,Angular,Ngrx,当我们为新的Angular项目做好准备时,我们正在评估各种体系结构概念,以便在系统中使用——特别是状态管理。在过去,主动通知客户机组件会带来自然的复杂性。今天,进入反应式编程和中央商店 我理解维护一个包含整个应用程序状态的“大型”中央存储的本质,它包含相应的操作(在各种服务中)、还原器和订阅者。我还看到了使用这些纯函数缩减器分层单元测试的好处。我的问题是,这与“关注点分离”和“单一责任”的经典概念有什么关系?在这些概念中,通过专用服务(注入依赖项)为这些组件维护状态,同时也提供了解耦的外观 为什

当我们为新的Angular项目做好准备时,我们正在评估各种体系结构概念,以便在系统中使用——特别是状态管理。在过去,主动通知客户机组件会带来自然的复杂性。今天,进入反应式编程和中央商店

我理解维护一个包含整个应用程序状态的“大型”中央存储的本质,它包含相应的操作(在各种服务中)、还原器和订阅者。我还看到了使用这些纯函数缩减器分层单元测试的好处。我的问题是,这与“关注点分离”和“单一责任”的经典概念有什么关系?在这些概念中,通过专用服务(注入依赖项)为这些组件维护状态,同时也提供了解耦的外观


为什么要使用大型中央存储而不是维护“包含”状态的单一服务,这些服务向订阅者发送更改并保持关注点的分离(例如:客户数据与库存数据是分离的)。尽管SO和web的其他部分也提到了这一点,但我没有看到直接解决这一问题的参考文献。比较这两个概念(中央存储状态与依赖注入服务/单例状态)和/或引用的想法非常值得赞赏

在你的角度之旅中,问问自己关于项目架构的这类问题无疑是一个好的开始

使用AngularJs(v1.x)时,我真的不知道以反应式方式工作的最佳模式是什么,并确保每个组件都可以订阅服务中某个位置的数据,如果另一个组件调用该服务来更新某些数据,其他组件将进行更新。 当时,我尝试了多种解决方案,最后将
RxJs
添加到我的项目中。这可能有点过分了,因为我没有意识到RxJs的超级能力,而且我基本上没有使用任何操作符,我只是在订阅

6~8个月前,我发现了
Redux
,并发现这种方法非常有趣。我决定深入研究集中式存储的思想,使用纯函数和不变的数据这是我作为web开发人员的最佳选择之一。您可以在任何框架之外使用
Redux
。因此,即使我必须用
JQuery
做一个例子并维护大量数据,我也会使用
Redux

我真正喜欢使用
Redux
的一件事是规范化我的数据,并像处理数据库一样处理它们,例如,在数据库中减速机处理表。带有
选择器的“
也是从原始“表”中合成数据的一种强大方式


我的问题是,这与“关注点分离”和“单一责任”的经典概念有什么关系?在这些概念中,通过专用服务(注入依赖项)为这些组件维护状态,同时也提供了解耦的外观

好的,正如你标记的
ngrx
我可以想象,你计划将其与Angular(v2或+)一起使用,关注点的分离非常好。您可以通过Reducer来拆分逻辑以操作表,但是,例如进行ajax调用怎么样?对于那种副作用,你应该使用。所以你仍然会有你的服务+减量器<代码>效果将允许您对给定操作的调度作出反应

例如,如果使用类型
FETCH\u USER
分派
操作
,则在减速机中,您只需将布尔值
isFetchingUser
切换为true(这样您就可以在视图中显示微调器)。然后从
user.effect.ts
(这是一项服务)捕获
FETCH\u user
操作并调用后端。响应到达后,从effect发送一个action
FETCH\u USER\u SUCCESS
,并将来自ajax调用的数据传递到action
payload

如果您想查看一些代码,我已经在Github上创建了一个名为的演示。它使用标准化数据的
@ngrx/store
@ngrx/effects

如果您有或Firefox Redux devtools扩展,您可以查看商店和操作


希望有帮助,如果您还有其他问题,请告诉我。

我知道了。所以你一针见血。你能分享一下为什么要使用第一种方法(你的第二段以“使用AngularJs(v1.x)我真的不知道…”开头)和redux/store方法吗?你可以在没有ngrx的情况下使用angular服务完成所有这些。您可以使用具有函数fetchUser()、布尔值isFetchingUser和变量userData的用户服务,一旦来自服务器的数据到达,该变量将被填充。您可以将此类服务注入所有需要用户数据的组件。请共享您的发现。。。