如何理解SAPE-CommerceCloudSpartacusUI中的proxyfacade?Jerry的文章Whatistheproxyfa?adeofSAPe-commercecloudSpartacusUI提供了理论解释。本文提供了一个实际示例。当我们打开如下url时,默认不会触发快单核心模块的加载,因为我们根本没有使用快单的任何功能:http://localhost:4299/electro...当然,我们还有一个办法,在首页的app.module.ts里面手动写一些代码。需要加载这些代码,QuickOrder核心模块才能正常执行:上面代码注入对QuickOrderFacade的依赖,虽然是QuickOrder根模块的一部分,正常加载,但是QuickOrderFacade只是一个抽象类,需要核心模块提供的具体实现才能继续执行。因此,添加上述代码后,当我们访问SpartacusUI的首页时,也会触发QuickOrderCore模块的加载。以上结论可以在Chrome开发者工具的network选项卡中观察QuickOrderCoreModule的加载:以及相应调试代码的打印:运行时,当AppModule作为入口模块被加载时,Angular框架会调用函数中声明的_resolveInjectorDefTypes解析器构造依赖:此时由于QuickOrder核心模块还没有加载,所以使用QuickOrderFacade提供的工厂方法FacadeFactory来提供依赖:这里标准的injectfromAngular/核心被调用,结合传入的描述符,进行注入:callinjectinjectionFacadeFactoryService的结果是什么?结果是一个FacadeFactoryService的实例,实例的每个属性字段也被注入到对应的实例中:这里我们要创建一个cartQuickOrderCore的具体实现,首先我们需要检查是否启用了这个特性:this.cmsConfig.featureModules确实有cartQuickOrder的记录:这里是尝试获取QuickOrderFacade的实现:最终是通过QuickOrderService注入的。此时应该已经加载了QuickOrder核心模块。我们仔细看看是哪一行代码触发了核心模块的加载?入口:该行下一个函数调用触发懒加载:最终位置:更多杰瑞原创文章,尽在:《汪子熙》:
