共计 877 个字符,预计需要花费 3 分钟才能阅读完成。
Command 设计模式提供了一种弱小且简化的形式来解决状态(换句话说,加载和缓存),并针对后端系统执行操作,比方 Spartacus Storefront B2B 场景下设置 Payment Method,即切换下图所示的 Radio button,对应的后盾实现就通过 Command 形式触发一个发送到 Commerce Cloud 后盾的 HTTP PUT OCC 申请。
Command 示意一种能够更改零碎状态的操作,通常是通过向后端收回 REST 调用来实现。想想上图 Spartacus 的例子,如何找到该 Command 对应的 OCC 申请精确的发动地位?还有 Connector 参加吗?
把鼠标移到 network 标签页的 Initiator 栏,查看函数调用列表。乍一看,咱们在 Spartacus B2B Storefront 发动的 OCC API 申请里,看不到 connector 的参加了?
checkoutPaymentTypeFacade 定义在 checkout/b2b 的 root 文件夹之下:
core 文件夹下的 service 实现了这个 facade:
通过存储 CommandService.create 工厂办法调用的后果,能够将命令实例定义为类的属性。
创立命令的工厂函数里,具备以下参数:
(1) 调度命令的函数(通常是对连接器的调用)
(2) 一个选项对象(通常用于指定策略)
上图 command 创立时,传入的调度函数第 60 行,就是 paymentTypeConnector 的连接器调用:
connector 调用 adapter:
adapter 调用 HTTP client 的规范 put 办法:
工厂函数的第二个参数是 Command 的 Strategy,有下列四种抉择:
- Parallel 并行执行所有命令。
- Queue 将命令排队并按程序执行, 这是默认策略。
- CancelPrevious 开始新的命令执行并勾销前一个命令,如果它尚未实现。此时前一个执行的后果流将实现而不会收回,能够类比 RxJs 的 SwitchMap Operator.
- ErrorPrevious 开始新的命令执行,如果前一个命令尚未实现则抛出谬误(前一次执行的后果流将抛出谬误)。