Spartacus 使用 Command 设计模式之后对以前 Connector 实现的重用

简介: Spartacus 使用 Command 设计模式之后对以前 Connector 实现的重用

Command 设计模式提供了一种强大且简化的方式来处理状态(换句话说,加载和缓存),并针对后端系统执行操作,比如 Spartacus Storefront B2B 场景下设置 Payment Method,即切换下图所示的 Radio button,对应的后台实现就通过 Command 方式触发一个发送到 Commerce Cloud 后台的 HTTP PUT OCC 请求。

a9f6ec3641851a2970654a0e241d40b5.png

Command 表示一种可以更改系统状态的操作,通常是通过向后端发出 REST 调用来完成。想想上图 Spartacus 的例子,如何找到该 Command 对应的 OCC 请求准确的发起位置?还有 Connector 参与吗?

307e1548d8d920f4c300c18b1c2def4d.png

把鼠标移到 network 标签页的 Initiator 栏,查看函数调用列表。乍一看,我们在 Spartacus B2B Storefront 发起的 OCC API 请求里,看不到 connector 的参与了?

58a3e6f7a683b5a9de0ba09a2bda371b.png

checkoutPaymentTypeFacade 定义在 checkout/b2b 的 root 文件夹之下:

7ef2a7c2caa0614dcc38811bf6364f84.png

core 文件夹下的 service 实现了这个 facade:

c0f27532770a4145a94d09e45f61b30c.png

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

0e8152e3280753c38b63d71c8ac9b566.png

创建命令的工厂函数里,具有以下参数:

(1) 调度命令的函数(通常是对连接器的调用)

(2) 一个选项对象(通常用于指定策略)

上图 command 创建时,传入的调度函数第 60 行,就是 paymentTypeConnector 的连接器调用:

eaac52272f3dc3d956f8931d3574b1c9.png

connector 调用 adapter:

5f272f12e860a385ddefb0b25add9250.png

adapter 调用 HTTP client 的标准 put 方法:

5dc3605c7b22f4c270d880f08a71c324.png

工厂函数的第二个参数是 Command 的 Strategy,有下列四种选择:


  • Parallel 并行执行所有命令。
  • Queue 将命令排队并按顺序执行,这是默认策略。
  • CancelPrevious 开始新的命令执行并取消前一个命令,如果它尚未完成。此时前一个执行的结果流将完成而不会发出,可以类比 RxJs 的 SwitchMap Operator.
  • ErrorPrevious 开始新的命令执行,如果前一个命令尚未完成则抛出错误(前一次执行的结果流将抛出错误)。
相关文章
|
设计模式 语音技术
设计模式12 - 命令模式【Command Pattern】
设计模式12 - 命令模式【Command Pattern】
52 0
|
5月前
|
设计模式 存储 Java
认真学习设计模式之命令模式(Command Pattern)
认真学习设计模式之命令模式(Command Pattern)
147 0
|
5月前
|
设计模式 存储 Java
【设计模式】JAVA Design Patterns——Command(事务模式)
【设计模式】JAVA Design Patterns——Command(事务模式)
|
5月前
|
设计模式 Java
设计模式-命令模式(Command)
设计模式-命令模式(Command)
63 0
|
设计模式 Java API
【设计模式——学习笔记】23种设计模式——命令模式Command(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——命令模式Command(原理讲解+应用场景介绍+案例介绍+Java代码实现)
117 0
|
设计模式 Java
设计模式~命令模式(Command)-18
目录 十八 命令模式(Command) (1)优点: (2)缺点: (3)使用场景: (4)注意事项: (5)应用实例: 代码 十八 命令模式(Co
57 0
|
前端开发 搜索推荐 JavaScript
什么是 SAP Spartacus 的 CMS Page Connector
什么是 SAP Spartacus 的 CMS Page Connector
|
设计模式 Java 数据库
Java中23种面试常考的设计模式之命令模式(Command)---行为型模式
Java中23种面试常考的设计模式之命令模式(Command)---行为型模式
85 1
|
28天前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
8天前
|
设计模式 Java Kotlin
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。对于快速学习Kotlin语法,推荐查看“简洁”系列教程。本文重点介绍了构建者模式在Kotlin中的应用与改良,包括如何使用具名可选参数简化复杂对象的创建过程,以及如何在初始化代码块中对参数进行约束和校验。
12 3