SAP Spartacus 中的 Commands and queries

举报
汪子熙 发表于 2022/10/03 11:12:32 2022/10/03
【摘要】 命令和查询提供了一种强大且简化的方式来处理状态(换句话说,加载和缓存),并针对后端系统执行操作。 这类似于 React Query 和 SWR 等库在单页应用程序中处理来自 API 的状态问题的方式。 前端应用状态很大一部分来自后端。 经常用于状态管理的 Redux 架构在创建时并未考虑到这种类型的状态,并且需要大量样板来支持它。 不同类型的状态需要不同的解决方案,并且命令和查询旨在处理来自...

命令和查询提供了一种强大且简化的方式来处理状态(换句话说,加载和缓存),并针对后端系统执行操作。 这类似于 React Query 和 SWR 等库在单页应用程序中处理来自 API 的状态问题的方式。 前端应用状态很大一部分来自后端。 经常用于状态管理的 Redux 架构在创建时并未考虑到这种类型的状态,并且需要大量样板来支持它。 不同类型的状态需要不同的解决方案,并且命令和查询旨在处理来自 Spartacus 中的 API 的状态。 在很多情况下,命令和查询将取代默认 Spartacus 库的 NgRx,并使大多数实现更简单,具有更好、更一致的错误处理,同时还利用 Spartacus 事件框架。

什么是 command

命令表示可以更改系统状态的操作,通常通过向后端发出 REST 调用。 命令可以返回结果,并且可以在考虑执行策略的同时执行。 每个命令执行都会返回一个 observable,它会发出(带有可选的成功结果),然后在命令完成时完成,或者在命令执行导致错误时抛出错误。

订阅结果 observable 并不能确定命令的执行,因此它是可选的。、

command definition

通过存储 CommandService.create 工厂方法调用的结果,可以将命令定义为类的属性。

命令具有以下参数:

  • 调度命令的函数(通常是对连接器的调用)
  • 一个选项对象(通常用于指定策略)

下面是一个例子:

  protected updateCommand: Command<{ details: User }> = this.command.create(
    (payload) =>
      this.userIdService.takeUserId(true).pipe(
        switchMap((uid) =>
          this.userProfileConnector.update(uid, payload.details)
      ),
    {
      strategy: CommandStrategy.Queue,
    }
  );
  • Parallel 并行执行所有命令。
  • Queue 将命令排队并按顺序执行(这是默认策略)。
  • CancelPrevious 开始新的命令执行,如果尚未完成则取消上一次执行(上一次执行的结果流将在不发射的情况下完成)。
  • ErrorPrevious 开始新的命令执行,如果尚未完成,则为上一个命令引发错误(上一次执行的结果流将引发错误)。

Exposing Commands in Facade Services

命令旨在公开为调用可以在命令类上执行的方法,并返回可观察的结果。 如前所述,调用可以简单地调用一个方法来执行命令。 订阅结果是可选的。 下面是一个例子:

  update(details: User): Observable<unknown> {
    return this.updateCommand.execute({ details });
  }
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。