30

我是 Angular 的新手,这个问题可能非常广泛。但我有兴趣了解更多关于状态管理的使用。最近我们的一个项目使用 NGXS 库实现了状态管理。但是我想了解它为应用带来的所有优势是什么?

实现非常深入和高级,有一些动作携带应用程序数据(由用户设置)和侦听那些处理请求并根据需要分派到下一步的动作的侦听器。这在应用程序使用或性能等方面与一般角度应用程序有何不同。我正处于理解状态管理的开始阶段,所以我觉得我正在编写很多可能并不真正需要的代码。示例 - 只是为了路由到另一个页面,我必须实现一个状态模式来保存对象并声明一个动作和一个侦听器来实现该动作。

我正在阅读几个文档并获取有关如何实施状态管理的详细信息,但没有得到为什么应该实施状态管理的正确答案。

先感谢您!

4

2 回答 2

45

首先,要回答您的问题,您应该知道状态管理不是 Angular 的一个术语,您不必使用它。状态管理是一个术语,它定义了我们可以存储数据、修改数据并对其更改做出反应的方式。在我们的例子中,库 NGRX 和 NGXS 使用一种称为CQRS(命令查询责任分离)原则的模式,我引用了 Wikipedia:

它指出每个方法都应该是执行操作的命令,或者是向调用者返回数据的查询,但不能同时是两者。

状态管理充当应用程序的单一事实来源。

您可以构建一个没有复杂状态管理的应用程序。您只能使用服务,一切顺利。向您的应用程序添加状态管理库(例如 NGRX/NGXS)会增加一些复杂性和样板,但随后您将获得以下好处(引自https://stackoverflow.com/a/8820998/1860540):

  1. 大型团队- 如果您选择了 CQRS 架构,您可以轻松地在人员之间拆分开发任务。您的顶级人员可以处理域逻辑,而将常规内容留给技能较低的开发人员。2.复杂的业务逻辑——CQRS 迫使你避免混合领域逻辑和基础设施操作。3.可扩展性问题- 使用 CQRS,您可以获得出色的读写性能,命令处理可以在多个节点上横向扩展,并且由于查询是只读操作,因此可以优化它们以执行快速读取操作。

最受欢迎的 Angular 状态管理库是NGRXNGXS

我不会详细说明 NGRX,但简而言之 - 它已在实际生产应用程序中证明了自己。

然而,NGXS 是一个更年轻的 Angular 状态管理库,它采用了 NGRX 的一些思想,并通过使用 Angular 提供的工具(例如 DI)“授权”它。NGRX 和 NGXS 之间的主要区别在于 NGXS 上的样板文件要少得多。如果您有兴趣,可以阅读Angular 的另一个状态管理的主要原因。

所以总结一下 - 如果您计划构建一个大型应用程序,那么您应该考虑使用状态管理,尽管 - 您不必这样做。

于 2018-09-24T22:36:08.067 回答
3

免责声明:我是图书馆的作者

ng-简单状态

Angular 中的简单状态管理,仅使用 Services 和 RxJS。

您可以尽可能简单地在组件之间共享状态,并利用组件状态和 Angular 的依赖注入系统的优点。

于 2021-06-01T21:57:18.420 回答