# 1. 心智模型 在任何贯穿示例之前,先建立概念地图。 框架是模块驱动的:PM 创建的每个页面、客户看到的每个页面,都是 `gdsmodule` 中的一行,并与 `gdsconfigformmaster/slave` 中的布局行、`gdsjurisdiction` 中的权限行,以及运行时通过 `BusinessBaseController` 调用的存储过程组合在一起。 ## 总览 ```mermaid flowchart TB classDef oos stroke-dasharray:5 5,color:#999 BACK["BACK
配置 UI"] FROUNT["FROUNT
客户 UI"] EXT([外部集成方]) HOOKS([第三方 webhook]) subgraph framework [框架运行时 - 本 Wiki 覆盖] XENTRY[xlyEntry] XAPI[xlyApi] XIF[xlyInterface] XFLOW[xlyFlow] XPLC[xlyPlc] XMSG[/"xlyMsg
库"/] end DB[("MySQL
xlyweberp_*")] REDIS[(Redis)] AMQ([ActiveMQ]) XEJMSC[xlyErpJmsConsumer] PLAT[("xlyPlat* 模块
+ MongoDB")]:::oos BACK --> XENTRY FROUNT --> XENTRY FROUNT --> XAPI EXT --> XAPI HOOKS --> XIF XENTRY --> DB XAPI --> DB XIF --> DB XFLOW --> DB XPLC --> DB XENTRY -- "保存时 @CacheEvict
同步执行" --> REDIS XENTRY <-- "缓存读取
+ Shiro session" --> REDIS XAPI <--> REDIS XENTRY -- "领域事件
(不是缓存失效)" --> AMQ AMQ --> XEJMSC XEJMSC -- "PRO_ERPMERGEBASE*
基础数据合并" --> DB XENTRY -. 使用 .-> XMSG XIF -. 使用 .-> XMSG PLAT -.-> DB ``` 虚线簇(`xlyPlat*` + MongoDB)是 B2B 印刷平台层。它存在于构建中,但在本 Wiki 中[不属于覆盖范围](../index.md)。 注意运行时到 Redis / ActiveMQ 有两条不同路径:**`@CacheEvict` 在保存流程中同步执行,直接清理共享 Redis 存储**(跨节点一致性依赖共享存储)。**JMS 路径是另一条基础数据合并通道**,不是缓存失效;`ConsumerChangeGdsModuleThread` 会运行 `PRO_ERPMERGEBASEGDSMODULE` 等过程。这两条路径在[元数据变更后的缓存失效](../reference/maintainer/cache-invalidation.md)中有完整说明。 每个框背后的类库清单见[技术栈](../reference/maintainer/tech-stack.md)。 ## 概念页 这些页面刻意保持简短:每页解释一个概念,并链接到实际使用该概念的[垂直切片](../slices/index.md)。概念页应该短;如果一页长到超过一屏,通常说明它应该变成一个切片。 - [数据驱动的基本论点](thesis.md) — 框架为什么长成这样。 - [模块、表单、虚拟表](modules-forms-vtables.md) — 三个核心名词。 - [主从单据模式](master-slave.md) — 到处都是表头 / 明细。 - [无物理外键、语义外键的现实](semantic-fk.md) — 关系实际如何工作。 - [两条定制通道](customization-channels.md) — 元数据编辑 vs. SQL 脚本。 - [定制层级](customization-layers.md) — 通道 1 内,基础 / 租户 / 用户覆盖如何合并。 - [多租户与产品版本](multi-tenancy.md) — 行作用域(`sBrandsId`、`sSubsidiaryId`)加上许可证控制的模块发现。 - [元数据驱动的请求生命周期](request-lifecycle.md) — 后续会反复回到这张图。 - [三层 API](api-surface.md) — 内部(`xlyEntry`)、外部(`xlyApi`)、入站 webhook(`xlyInterface`)。