SAP 电商云 Spartacus UI Proxy Facade 的一个实际例子
如何理解 SAP 電商云 Spartacus UI 中的 proxy facade?
Jerry 這篇文章什么是 SAP 電商云 Spartacus UI 的 proxy fa?ade提供了理論上的解釋。
本文介紹一個實際例子。
當我們打開如下 url 時,默認是不會觸發 Quick Order Core module 的加載的,因為我們根本沒有使用到 Quick Order 任何功能:
http://localhost:4299/electronics-spa/en/USD/
當然,我們仍然有辦法,在 homepage 的 app.module.ts 里手動編寫一些代碼,這些代碼需要 Quick Order core module 被加載之后才能正常執行:
上面代碼注入的依賴 QuickOrderFacade,雖然是 Quick Order root module 的一部分,被正常加載,但是 QuickOrderFacade 只是一個 Abstract Class,需要 core module 里提供的具體實現才能繼續執行。因此,加上了上述代碼之后,我們訪問 Spartacus UI 的 homepage,也會觸發 Quick Order Core module 的加載。
上述結論可以在 Chrome 開發者工具 network 標簽頁里觀察到 Quick Order Core Module 的加載:
以及對應調試代碼的打印:
在運行時,當 AppModule 作為入口 module 被加載時,Angular 框架會調用 _resolveInjectorDefTypes 解析器構造函數里聲明的依賴:
此時因為 QuickOrder core module 尚未加載,因此通過 QuickOrderFacade 提供的工廠方法 FacadeFactory 去提供依賴:
這里調用標準的來自 Angular/core 的 inject,結合傳入的 descriptor,進行注入:
調用 inject 注入 FacadeFactoryService 的結果是什么?
結果就是得到了 FacadeFactoryService 的一個實例,且該實例的每個屬性字段也均被注入了對應的實例了:
這里我們準備創建 cartQuickOrderCore 的具體實現,首先需要檢查這個 feature 是否已經啟用:
this.cmsConfig.featureModules 里確實存在 cartQuickOrder 的記錄:
這里試圖獲取 QuickOrderFacade 的實現:
最終是通過 QuickOrderService 注入的。
此時 Quick Order core module 應該已經加載了。
我們來具體看一下到底是哪行代碼觸發的 core module 加載?
入口:
這一行的下一個函數調用觸發延遲加載:
最終位置:
更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的SAP 电商云 Spartacus UI Proxy Facade 的一个实际例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 菜鸟驿站爆改大征集:夜间自助取件 这5个
- 下一篇: 后置镜头激凸更明显 iPhone 15