SAP|SAP Commerce Cloud Spartacus UI 的 ActionClass 数据结构设计
以 CmsSetPageSuccessIndex 为例:
文章图片
运行时该 Action 类包含三大字段:
(1) meta
(2) payload
(3) type
meta
meta 包含的 loader 字段和 meta 本身都是一个 object.
meta.entityId 和 entityType 是该 action payload 的标识位。
文章图片
loader 表明该 entity 加载状况。
payload
包含的业务数据:
文章图片
type
字符串类型。
文章图片
从 上图 Prototype 能看出,CmsSetPageSuccessIndex 的原型链类为 EntitySuccessAction.
这一点也能从其实现代码看出:
export class CmsSetPageSuccessIndex extends StateUtils.EntitySuccessAction {
readonly type = CMS_SET_PAGE_SUCCESS_INDEX;
constructor(pageContext: PageContext, payload: Page) {
super(pageContext.type, pageContext.id, payload);
}
}
查看 EntitySuccessAction 的实现:

文章图片
属性1,meta 属性,定义在该类里。
属性2,payload,通过构造函数参数定义。
属性3,type,定义在上图81行,然后被 CmsSetPageSuccessIndex 重载。
EntitySuccessAction 构造函数接收三个参数:entityType,id 和 payload.
通过 entityType 和 id,生产出 meta 字段。
entitySuccessMeta 可以看成一个构造器或者工厂函数:

文章图片
根据 entityType 和 id,生产出 EntityLoaderMeta, 后者是 EntityMeta 和 LoaderMeta 的联合。
export interface EntityMeta {
entityType: string;
entityId: string | string[];
entityRemove?: boolean;
}export interface LoaderMeta {
entityType: string;
loader: {
load?: boolean;
error?: any;
success?: boolean;
};
}
采用三个点的语法,是因为这两个 interface,都有同名字段:entityType
LoaderMeta 的运行时数据,通过构造器 loadMeta 制造:
export function loadMeta(entityType: string): LoaderMeta {
return {
entityType: entityType,
loader: {
load: true,
},
};
}
EntityMeta 字段的值,通过 entityMeta 构造:
export function entityMeta(type: string, id: string | string[]): EntityMeta {
return {
entityType: type,
entityId: id,
};
}
运行时通过 PageEffect 从 Commerce Cloud 后台读取 CMS 数据成功后,新建 ActionClass,将负载通过构造函数参数传入。
【SAP|SAP Commerce Cloud Spartacus UI 的 ActionClass 数据结构设计】

文章图片
更多Jerry的原创文章,尽在:"汪子熙":

文章图片
推荐阅读
- Spring|Spring Cloud Feign实现文件上传下载的示例代码
- 为Google|为Google Cloud配置深度学习环境(CUDA、cuDNN、Tensorflow2、VScode远程ssh等)
- 【SpringCloud-Alibaba系列教程】8.一文学会使用sentinel
- java|java B2B2C 仿淘宝电子商城系统-Spring Cloud构建分布式电子商务平台
- Spring|Spring Cloud Feign组件
- Spring|Spring Cloud Alibaba之负载均衡组件 - Ribbon
- Spring|Spring Cloud学习day98(Eureka的原理和Ribbon负载均衡)
- 史上最简单的SpringCloud教程|史上最简单的SpringCloud教程 | 第十篇: 高可用的服务注册中心(Finchley版本)
- Spring|Spring Cloud Gateway真的有那么差吗()
- (三十)java版spring|(三十)java版spring cloud+spring boot+redis多租户社交电子商务平台- gateway限流