天天看點

SAP Spartacus module 層級結構設計的一種實踐Spartacus ModuleSpartacus Configuration ModuleSpartacus Features ModuleSpecific Feature Modules

Reference App Structure

這個推薦的 Spartacus 應用程式結構旨在作為您設定自己的 Spartacus 應用程式時的參考。

Spartacus 是一個 Angular 庫,這意味着它可以在 Angular 應用程式中單獨使用,也可以內建到現有的 Angular 項目中。相反,您可以将任何其他 Angular 解決方案或庫添加到您的 Spartacus 項目中。

Spartacus 本身帶有多個層和概念,以及一些可以延遲加載開箱即用的較小特征庫。自定義和第三方代碼進一步增加了複雜性,您最終可能會得到難以維護的子產品,因為它們将太多這些元素混合在一起。

這可以通過定義和遵守标準化結構來解決,例如 Spartacus 參考應用程式結構。擁有标準化結構還可以更輕松地将新開發人員納入您的項目、處理外部支援案例以及進行審計。

通過使用 Spartacus 參考應用程式結構,您可以從每個主要 Spartacus 版本提供的自動遷移中獲益最多,同時還保持添加自定義的靈活性,并在這些自定義之上建構新功能。使用參考應用程式結構還可以為 3.0 版本後移入單獨庫的功能利用代碼拆分。

要檢視使用參考應用程式結構的工作示例,請參閱此存儲庫。

Spartacus Module

該 module 導入 B2C 或者 B2B 配置 module,以及 BaseStorefrontModule 和 SpartacusFeaturesModule:

SAP Spartacus module 層級結構設計的一種實踐Spartacus ModuleSpartacus Configuration ModuleSpartacus Features ModuleSpecific Feature Modules

導出 BaseStorefrontModule.

注意,雖然 Angular Router 和 NgRx 都是 Spartacus 使用的,但是這些都會影響全局應用,是以它們被儲存在 SpartacusModule 之外,直接導入到 AppModule 中。

SpartacusModule 由以下部分組成:

  • BaseStorefrontModule,它封裝了大多數 Spartacus 應用程式通常需要的核心 Spartacus 導入。

BaseStorefrontModule 直接從@spartacus/storefront 導入。

  • SpartacusFeaturesModule,它封裝了 Spartacus 功能。
  • SpartacusConfigurationModule,它封裝了通用的 Spartacus 配置。

在大多數情況下,Spartacus 子產品不會被修改,因為更改通常封裝在配置子產品或功能子產品中。

下面是 SpartacusModule 的實作:

import { NgModule } from '@angular/core';
import { BaseStorefrontModule } from '@spartacus/storefront';
import { SpartacusConfigurationModule } from './spartacus-configuration.module';
import { SpartacusFeaturesModule } from './spartacus-features.module';

@NgModule({
  imports: [
    BaseStorefrontModule,
    SpartacusFeaturesModule,
    SpartacusConfigurationModule,
  ],
  exports: [BaseStorefrontModule],
})
export class SpartacusModule {}           

複制

Spartacus Configuration Module

該 Module 包含所有全局的配置元素。

特性特定的配置可以儲存在特性子產品中,也可以儲存在 SpartacusConfigurationModule 中。 将它們儲存在功能子產品中有助于保持良好的關注點分離,是以通常建議這樣做,但如果有助于解決特定問題(例如,通過使用 env 更改配置)。

Spartacus Features Module

SpartacusFeaturesModule 旨在輕松管理所有非核心 Spartacus 功能,包括靜态加載和延遲加載。 它充當所有功能的入口點,理想情況下,這些功能被包裝到自己的獨立功能子產品中。

在早期的 3.x 次要版本中,SpartacusFeaturesModule 可能看起來臃腫而忙碌,但随着每個連續的釋出,它應該變得更加簡潔,因為努力将大部分功能移到單獨的庫中。

例子:

SAP Spartacus module 層級結構設計的一種實踐Spartacus ModuleSpartacus Configuration ModuleSpartacus Features ModuleSpecific Feature Modules
SAP Spartacus module 層級結構設計的一種實踐Spartacus ModuleSpartacus Configuration ModuleSpartacus Features ModuleSpecific Feature Modules

Specific Feature Modules

理想情況下,可以将一個完整的功能封裝到一個特定的功能子產品中。該子產品可以包含與功能相關的配置以及自定義。

以下是具有延遲加載配置的功能子產品的示例:

SAP Spartacus module 層級結構設計的一種實踐Spartacus ModuleSpartacus Configuration ModuleSpartacus Features ModuleSpecific Feature Modules

FeatureModule eager 加載輕量級的 QuickOrderRootModule,然後使用延遲加載,去處理包含了重量級的 Service 和 Component 實作的 QuickOrderModule.

某些 feature module 的啟用與否,通過環境變量來決定:

SAP Spartacus module 層級結構設計的一種實踐Spartacus ModuleSpartacus Configuration ModuleSpartacus Features ModuleSpecific Feature Modules