关于sap:SAP-Spartacus-module-层级结构设计的一种实践

10次阅读

共计 2000 个字符,预计需要花费 5 分钟才能阅读完成。

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:

导出 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 可能看起来臃肿而繁忙,但随着每个间断的公布,它应该变得更加简洁,因为致力将大部分性能移到独自的库中。

例子:

Specific Feature Modules

现实状况下,能够将一个残缺的性能封装到一个特定的功能模块中。该模块能够蕴含与性能相干的配置以及自定义。

以下是具备提早加载配置的功能模块的示例:

FeatureModule eager 加载轻量级的 QuickOrderRootModule,而后应用提早加载,去解决蕴含了重量级的 Service 和 Component 实现的 QuickOrderModule.

某些 feature module 的启用与否,通过环境变量来决定:

更多 Jerry 的原创文章,尽在:” 汪子熙 ”:

正文完
 0