SAP 电商云 Spartacus UI 支持延迟加载的新功能的入口设计
假設我們要為 Spartacus UI 開發一個新功能,首先,這個新功能,應該放到 feature library 文件夾里:
這個新功能的入口,放置到 Feature Module 中。
新功能通過 public_api.ts 將公有功能暴露給外部消費者。后者從 index.ts 里導入,而 index.ts 又導入 quick-order.module.ts 中的內容。
QuickOrderModule 導入 CoreModule 和 ComponentsModule,二者都是重量級 module,需要支持延遲加載。
ng-package.json 文件里,定義了該新功能的入口文件 entryFile 為 public_api.ts:
注意,在根目錄 angular.json 里,我們找不到和 quick order 相關的實現,這說明 Quick Order 并不是一個獨立的 library?
這里說明 quick order 是 cart library 的一部分:
從這里的文件夾層級結構也能說的通:
對于 QuickOrder 這個新功能來說,其入口并不是我們上圖看到的 QuickOrderModule,而是下圖所示的 QuickOrderFeatureModule,后者包含了一個輕量級的 QuickOrderRootModule 實現,而上圖看到的重量級實現 QuickOrderModule,通過延遲加載的方式,在下圖代碼第20行導入系統。
Root 文件夾里的 QuickOrderRootModule 是一個非常輕量級的實現:
僅僅包含了路由設置和 CMS Component 映射關系的維護。
Facade 層通過 index.ts 導出:
然后 public_api.ts 導出 index.ts 的全部內容:
為什么要設計這個 public_api.ts 呢?為了讓語義更加清楚。這個最佳實踐定義在此處。
- public_api.ts 旨在枚舉和公開特定功能以供外部使用。 * index.ts 旨在作為默認導出機制來棄用絕對路徑導入。
更詳細的討論:
(1) 消歧:鑒于缺少“內部”修飾符和內部模塊增加的復雜性,需要多個 index.ts 桶文件來提供不同的內部/外部 API 表面。
(2) Angular CLI 面向用戶的工具:為了提供省力的工具默認值,需要一個公共 API 文件標準。 NG 編譯器所做的不僅僅是將所有 TypeScript 構建為 JavaScript;值得注意的是,它還會根據選擇的入口點進行搖樹。出于其他原因, index.ts 是默認的糟糕選擇。
(3) Angular 內部代碼質量:public-api 是與 Angular 消費者的契約,必須嚴格控制,伴隨著文檔變化、新測試、兼容性評估和公告的變化。為此,項目設置會自動拒絕導致 public-api 更改的代碼更改。
(4) 意識/清晰度/意圖:我認為這通常是其他評論所暗示的。歷史上,人們一直在使用 index.ts 來處理內部和外部的所有事情。當然,一個項目只能將 index.ts 用于公共 API 簽名,但這并不明顯。
更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的SAP 电商云 Spartacus UI 支持延迟加载的新功能的入口设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用 ABAP 手动解析包含二进制文件的
- 下一篇: 机器学习在客户管理场景中的应用