【问题标题】:What is state management in angular? and why should I use it?什么是角度状态管理?我为什么要使用它?
【发布时间】:2019-02-27 12:29:27
【问题描述】:

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

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

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

提前谢谢你!

【问题讨论】:

标签: typescript angular6 state-management ngxs


【解决方案1】:

首先,要回答你的问题,你应该知道状态管理不是 Angular 的一个术语,你不必使用它。状态管理是一个术语,它定义了我们可以存储数据、修改数据并对其更改做出反应的方式。在我们的例子中,库 NGRX 和 NGXS 使用称为CQRS (Command Query Responsibility Segregation) 原则的模式,我引用维基百科:

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

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

您无需复杂的状态管理即可构建应用。您只能使用服务,一切顺利。将状态管理库(例如 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 上的样板文件要少得多。有兴趣的可以阅读主要原因Why another state management for Angular

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

【讨论】:

  • 太棒了!非常感谢@Eliya 特别是向我介绍了 CQRS 原理。
  • 这是一个非常好的答案。一个完整的总结(Y)ty
  • 这里是最流行的状态管理工具的一个非常酷的总结:ordina-jworks.github.io/angular/2018/10/08/…
【解决方案2】:

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

ng-simple-state

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

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

【讨论】:

    猜你喜欢
    • 2017-12-27
    • 2017-01-10
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    相关资源
    最近更新 更多