Spartacus 使用 Command 設計模式之後對以前 Connector 實現的重用

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 開始新的命令執行,如果前一個命令尚未完成則拋出錯誤(前一次執行的結果流將拋出錯誤)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章