802 lines
25 KiB
Markdown
802 lines
25 KiB
Markdown
# Continental Retail APP Architecture Diagram 详细说明
|
||||
|
|
|
|||
|
|
本文用于解释 `architecture-diagram.drawio` 中的 3 张系统架构图,帮助产品、研发、架构、移动端、后端、集成、测试和评审人员快速理解这套系统为什么这样设计、每一页分别在说明什么、不同域之间的关系如何划分,以及关键访问链路和治理规则如何落地。
|
|||
|
|
|
|||
|
|
这 3 张图不是数据库设计图,也不是接口字段定义图,更不是某台服务器部署细节图。它们的定位是:
|
|||
|
|
|
|||
|
|
- 用于统一架构认知。
|
|||
|
|
- 用于评审系统边界和责任归属。
|
|||
|
|
- 用于说明主访问链路和例外链路。
|
|||
|
|
- 用于帮助研发和测试理解关键业务运行方式。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 这 3 张图整体在表达什么
|
|||
|
|
|
|||
|
|
这套图表达的是一套“统一移动入口、主后台统一编排、历史后台保留独立边界、供应商能力受控接入”的系统架构。
|
|||
|
|
|
|||
|
|
它的核心目标不是把所有历史系统都并进一个后台,而是在保留实际业务边界的前提下,把移动端访问链路重新组织成一个清晰、可治理、可演进的体系。
|
|||
|
|
|
|||
|
|
3 张图分别承担不同职责:
|
|||
|
|
|
|||
|
|
- `System Overview`
|
|||
|
|
说明系统能力分别归谁拥有,重点是“谁负责什么”。
|
|||
|
|
- `System Architecture`
|
|||
|
|
说明系统按层分布后的结构关系,重点是“系统怎么连接、怎么治理”。
|
|||
|
|
- `Key Flows and Context Governance`
|
|||
|
|
说明关键业务链路在运行时如何流转,重点是“具体流程怎么走、异常和上下文怎么管”。
|
|||
|
|
|
|||
|
|
这 3 张图共同强调以下架构原则:
|
|||
|
|
|
|||
|
|
- `Mobile App -> App Backend` 是唯一主访问链路。
|
|||
|
|
- `App Backend` 是 APP 的主后台和统一业务编排中心。
|
|||
|
|
- `Mini Program Backend` 继续保持独立后台域,不直接并入主后台。
|
|||
|
|
- `F6 Supplier Domain` 是供应商能力域,不被定义为 APP 主后台。
|
|||
|
|
- `Mobile App -> F6` 只允许发生在嵌入式 `WebView` 场景。
|
|||
|
|
- `App Backend -> F6 APIs` 必须经过 `F6 Integration Adapter`。
|
|||
|
|
- 历史 Mini 直连链路只保留为兼容路径,不作为推荐默认方案。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 图例和颜色到底在表达什么
|
|||
|
|
|
|||
|
|
为了让读图的人在 3 页之间建立统一认知,这套图对颜色和线条语义做了固定约定。
|
|||
|
|
|
|||
|
|
### 2.1 颜色语义
|
|||
|
|
|
|||
|
|
- 蓝色区域和蓝色节点
|
|||
|
|
表示 APP 本身和 `App Backend` 主域相关能力。
|
|||
|
|
- 绿色区域和绿色节点
|
|||
|
|
表示保留的 `Mini Program Backend` 历史业务域。
|
|||
|
|
- 橙色区域和橙色节点
|
|||
|
|
表示 `F6 Supplier Domain`、WebView 入口、供应商接入和集成适配层。
|
|||
|
|
- 灰色区域和灰色说明
|
|||
|
|
表示通用治理、跨域聚合、外部服务或非主业务实体说明。
|
|||
|
|
- 红色点线
|
|||
|
|
表示历史兼容链路,只是过渡保留,不是推荐设计。
|
|||
|
|
|
|||
|
|
### 2.2 连线语义
|
|||
|
|
|
|||
|
|
- 蓝色实线
|
|||
|
|
表示主访问链路,也就是 APP 面向主后台的标准访问方式。
|
|||
|
|
- 橙色虚线
|
|||
|
|
表示 F6 相关的例外链路,包括嵌入式 WebView、换票和供应商访问路径。
|
|||
|
|
- 灰色虚线
|
|||
|
|
表示聚合访问、外部服务访问或跨域读取。
|
|||
|
|
- 红色点线
|
|||
|
|
表示历史兼容直连,不建议在新功能中继续复制。
|
|||
|
|
|
|||
|
|
这组语义在 3 页中都保持一致。第三页底部的 `Route Semantics` 也用线段样例再次标注这些规则,避免读图时只靠颜色文字理解链路含义。因此这套图并不是 3 张孤立页面,而是一套统一的架构表达。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 第一页:System Overview 详细说明
|
|||
|
|
|
|||
|
|
`System Overview` 是能力归属图。它的重点不是展示某个接口先调谁、后调谁,而是回答一个更基础的问题:
|
|||
|
|
|
|||
|
|
“整套系统里,不同能力到底归哪个域负责?”
|
|||
|
|
|
|||
|
|
这一页把系统划分成 4 个主域和 1 个底部治理带:
|
|||
|
|
|
|||
|
|
- `Mobile App`
|
|||
|
|
- `App Backend`
|
|||
|
|
- `Mini Program Backend Domain`
|
|||
|
|
- `F6 Supplier Domain`
|
|||
|
|
- `External Services + Governance Rules`
|
|||
|
|
|
|||
|
|
### 3.1 Mobile App:统一移动入口
|
|||
|
|
|
|||
|
|
左侧第一列是 `Mobile App`,代表用户真正使用的移动端容器。
|
|||
|
|
|
|||
|
|
这部分说明的是,APP 在架构中的职责主要是“承载、呈现、调用原生能力、维持当前会话”,而不是直接承担复杂跨系统编排。
|
|||
|
|
|
|||
|
|
它包含几个关键块:
|
|||
|
|
|
|||
|
|
- `Login / Agreement / App Shell`
|
|||
|
|
表示 APP 是唯一统一入口,用户从这里进入整个系统。
|
|||
|
|
- `WebView + JSBridge`
|
|||
|
|
表示 APP 具备嵌入式 WebView 承载能力,但这里特别强调“只用于 F6 portal pages”,不是泛化的任意外部浏览器。
|
|||
|
|
- `Native Capabilities`
|
|||
|
|
表示扫码、相机、上传、蓝牙、通知等设备能力由 APP 容器掌控。
|
|||
|
|
- `Store-Aware Session Holder`
|
|||
|
|
表示 APP 本地会持有当前门店和角色上下文,但上下文本身的权威归属仍然在主后台。
|
|||
|
|
|
|||
|
|
换句话说,APP 主要负责:
|
|||
|
|
|
|||
|
|
- 提供统一入口。
|
|||
|
|
- 承担页面容器。
|
|||
|
|
- 调度设备能力。
|
|||
|
|
- 保存当前会话状态。
|
|||
|
|
|
|||
|
|
但 APP 不负责:
|
|||
|
|
|
|||
|
|
- 多系统聚合编排。
|
|||
|
|
- 供应商 API 直接调用。
|
|||
|
|
- 业务权限主判断。
|
|||
|
|
- 门店上下文主定义。
|
|||
|
|
|
|||
|
|
### 3.2 App Backend:主业务域和控制中心
|
|||
|
|
|
|||
|
|
中间第二列是 `App Backend`,这是整页最核心的部分。
|
|||
|
|
|
|||
|
|
这一列强调的是:APP 主后台不只是一个普通 API 服务,而是整个移动平台的控制面和编排中心。
|
|||
|
|
|
|||
|
|
它包含以下能力:
|
|||
|
|
|
|||
|
|
- `Auth and Token Center`
|
|||
|
|
负责登录、令牌签发、刷新、退出和身份可信控制。
|
|||
|
|
- `Store Context + Menu + Permission + Config`
|
|||
|
|
负责当前门店、角色范围、菜单权限和配置下发。
|
|||
|
|
- `Workbench Aggregation`
|
|||
|
|
负责首页工作台、提醒、摘要和多个系统结果的统一返回。
|
|||
|
|
- `Business Orchestration`
|
|||
|
|
负责订单、采购、流程上下文和字段标准化。
|
|||
|
|
- `WebView Ticket and Signing Entry`
|
|||
|
|
负责 F6 WebView 场景的换票、上下文准备和 trace handoff。
|
|||
|
|
|
|||
|
|
这一列的含义非常明确:
|
|||
|
|
|
|||
|
|
- APP 所有主流程都应先到这里。
|
|||
|
|
- 这里决定用户是谁、当前在哪个门店、可以看什么菜单、有什么权限。
|
|||
|
|
- 这里负责把复杂的后端异构系统整合成移动端可用结果。
|
|||
|
|
- 这里也是所有供应商接入和链路治理的统一出口。
|
|||
|
|
|
|||
|
|
如果没有这一层,移动端就会变成一个多后台直连客户端,导致:
|
|||
|
|
|
|||
|
|
- 门店和角色上下文不统一。
|
|||
|
|
- 权限边界难以收口。
|
|||
|
|
- 多系统异常无法统一处理。
|
|||
|
|
- 供应商接入逻辑扩散到多个模块。
|
|||
|
|
|
|||
|
|
### 3.3 Mini Program Backend Domain:保留独立边界的历史系统域
|
|||
|
|
|
|||
|
|
第三列是 `Mini Program Backend Domain`。
|
|||
|
|
|
|||
|
|
这部分要表达的不是“历史系统不重要”,而是:
|
|||
|
|
|
|||
|
|
“这些系统仍然重要,但它们不是 APP 的统一主后台。”
|
|||
|
|
|
|||
|
|
图中列出了典型保留系统:
|
|||
|
|
|
|||
|
|
- `O2O`
|
|||
|
|
- `Warranty`
|
|||
|
|
- `Retail Store`
|
|||
|
|
- `ROOS`
|
|||
|
|
|
|||
|
|
其中 `Retail Store` 对应“马上下单”体系中的门店注册、门店信息修改、店员管理等门店基础资料能力,不再使用容易被误解为交易订单的旧英文表述。
|
|||
|
|
|
|||
|
|
并通过说明卡强调:
|
|||
|
|
|
|||
|
|
- 它们仍然拥有历史业务数据和流程。
|
|||
|
|
- 它们仍然可以是某些能力的 `Source of Truth`。
|
|||
|
|
- 但面向 APP 的访问,原则上应通过 `App Backend` 聚合和标准化后暴露。
|
|||
|
|
|
|||
|
|
这部分架构表达非常重要,因为它避免了两个极端:
|
|||
|
|
|
|||
|
|
- 一个极端是误以为历史系统可以被立刻彻底替换。
|
|||
|
|
- 另一个极端是继续把移动端做成多个小程序后台的直连入口。
|
|||
|
|
|
|||
|
|
正确做法是:
|
|||
|
|
|
|||
|
|
- 保留历史系统边界。
|
|||
|
|
- 承认它们的业务归属。
|
|||
|
|
- 但将移动端访问统一收束到主后台。
|
|||
|
|
|
|||
|
|
### 3.4 F6 Supplier Domain:供应商能力域
|
|||
|
|
|
|||
|
|
第四列是 `F6 Supplier Domain`。
|
|||
|
|
|
|||
|
|
这部分专门用来说明 F6 的定位:
|
|||
|
|
|
|||
|
|
- 它是供应商域。
|
|||
|
|
- 它提供能力,但不是 APP 的主系统。
|
|||
|
|
- 它既包含页面能力,也包含接口能力。
|
|||
|
|
|
|||
|
|
图中分成两类:
|
|||
|
|
|
|||
|
|
- `F6 WebView Pages`
|
|||
|
|
- `F6 Capability APIs`
|
|||
|
|
|
|||
|
|
并给出代表性示例:
|
|||
|
|
|
|||
|
|
- WebView 例子:`Sales, scan, settlement, inbound`
|
|||
|
|
- API 例子:`Procurement, activity, inventory sync`
|
|||
|
|
|
|||
|
|
这里的核心意思是:
|
|||
|
|
|
|||
|
|
- 页面可以在受控情况下嵌入到 APP WebView 中。
|
|||
|
|
- API 不允许 APP 前端直接调用。
|
|||
|
|
- 所有 API 级访问应通过 `App Backend` 内部适配层完成。
|
|||
|
|
|
|||
|
|
### 3.5 底部:External Services 和 Governance Rules
|
|||
|
|
|
|||
|
|
最底部是一条横向带,补充说明两件事:
|
|||
|
|
|
|||
|
|
- 系统还会依赖外部服务。
|
|||
|
|
- 整套系统必须遵守统一治理规则。
|
|||
|
|
|
|||
|
|
外部服务示例包括:
|
|||
|
|
|
|||
|
|
- `SMS`
|
|||
|
|
- `Marketing / CRM`
|
|||
|
|
- `WeCom`
|
|||
|
|
|
|||
|
|
治理规则则明确写出 4 条核心边界:
|
|||
|
|
|
|||
|
|
- `App -> App Backend is primary`
|
|||
|
|
- `App -> F6 only in Embedded WebView`
|
|||
|
|
- `F6 APIs go through Adapter`
|
|||
|
|
- `Mini direct access is legacy-only`
|
|||
|
|
|
|||
|
|
这 4 条规则可以理解为第一页的结论。整张图不只是介绍组件,而是在告诉所有参与方:
|
|||
|
|
|
|||
|
|
“系统边界和默认访问方式已经定了,新需求不要再随意绕开它。”
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 第二页:System Architecture 详细说明
|
|||
|
|
|
|||
|
|
`System Architecture` 是分层架构图。它建立在第一页能力归属基础上,进一步解释系统按层组织后的技术结构。
|
|||
|
|
|
|||
|
|
如果第一页回答的是“谁负责什么”,那么第二页回答的是:
|
|||
|
|
|
|||
|
|
“这些能力在逻辑架构上如何分层组织,链路如何穿过这些层?”
|
|||
|
|
|
|||
|
|
这一页分成以下层次:
|
|||
|
|
|
|||
|
|
- `Client Tier`
|
|||
|
|
- `Access & Security`
|
|||
|
|
- `App Backend`
|
|||
|
|
- `Integration Layer`
|
|||
|
|
- `Mini Program Backend`
|
|||
|
|
- `F6 Supplier Domain`
|
|||
|
|
- `External Services`
|
|||
|
|
- `Cross-Cutting`
|
|||
|
|
|
|||
|
|
### 4.1 Client Tier:客户端层
|
|||
|
|
|
|||
|
|
最上层是 `Client Tier`。
|
|||
|
|
|
|||
|
|
这里包含:
|
|||
|
|
|
|||
|
|
- `Store User Persona`
|
|||
|
|
- `Mobile App`
|
|||
|
|
- `Native Capabilities`
|
|||
|
|
- `WebView + JSBridge`
|
|||
|
|
|
|||
|
|
这层说明的是:
|
|||
|
|
|
|||
|
|
- 用户并不是直接面对多个后端系统,而是面对一个统一 APP。
|
|||
|
|
- 原生能力和 WebView 容器都属于客户端能力域。
|
|||
|
|
- 客户端负责发起请求、展示页面、承载设备能力和 WebView 容器。
|
|||
|
|
|
|||
|
|
这里再次强调:`WebView + JSBridge` 是一种容器能力,不等于前端可以直接把供应商接口当成主链路使用。
|
|||
|
|
|
|||
|
|
### 4.2 Access & Security:接入与安全层
|
|||
|
|
|
|||
|
|
第二层是 `Access & Security`。
|
|||
|
|
|
|||
|
|
它包含:
|
|||
|
|
|
|||
|
|
- `API Gateway`
|
|||
|
|
- `JWT / Auth`
|
|||
|
|
- `WebView Allowlist`
|
|||
|
|
|
|||
|
|
这层表达的是系统接入不能裸奔,所有访问必须经过入口控制和安全校验。
|
|||
|
|
|
|||
|
|
#### API Gateway
|
|||
|
|
|
|||
|
|
`API Gateway` 代表统一 API 接入入口,负责:
|
|||
|
|
|
|||
|
|
- HTTPS / TLS 接入。
|
|||
|
|
- 路由分发。
|
|||
|
|
- 基础限流和治理。
|
|||
|
|
- 将移动端和后端实现细节隔离。
|
|||
|
|
|
|||
|
|
#### JWT / Auth
|
|||
|
|
|
|||
|
|
`JWT / Auth` 代表统一身份凭证体系,负责:
|
|||
|
|
|
|||
|
|
- 令牌签发。
|
|||
|
|
- 令牌刷新。
|
|||
|
|
- 请求身份识别。
|
|||
|
|
- 为后续权限和上下文建立可信基础。
|
|||
|
|
|
|||
|
|
#### WebView Allowlist
|
|||
|
|
|
|||
|
|
`WebView Allowlist` 是这一层里很关键的一个治理点。
|
|||
|
|
|
|||
|
|
它表达的是:
|
|||
|
|
|
|||
|
|
- 并不是任何外部 WebView 页面都可以被 APP 打开。
|
|||
|
|
- 嵌入式 WebView 域名必须是受控、登记和允许的。
|
|||
|
|
- 这既是安全规则,也是架构边界规则。
|
|||
|
|
|
|||
|
|
### 4.3 App Backend:主后台层
|
|||
|
|
|
|||
|
|
第三层是 `App Backend`,也是架构主域。
|
|||
|
|
|
|||
|
|
这里包含:
|
|||
|
|
|
|||
|
|
- `Identity & Store Center`
|
|||
|
|
- `BFF Orchestration`
|
|||
|
|
- `Workbench Aggregation`
|
|||
|
|
- `WebView Ticket Center`
|
|||
|
|
|
|||
|
|
#### Identity & Store Center
|
|||
|
|
|
|||
|
|
这个模块负责:
|
|||
|
|
|
|||
|
|
- 用户身份。
|
|||
|
|
- 门店主数据。
|
|||
|
|
- 角色范围。
|
|||
|
|
- 菜单权限。
|
|||
|
|
|
|||
|
|
它的意义是让系统具备统一上下文中心,否则每个后端域都按自己的方式解释用户和门店,会导致移动端体验严重割裂。
|
|||
|
|
|
|||
|
|
#### BFF Orchestration
|
|||
|
|
|
|||
|
|
这是面向移动端的统一 BFF 编排层,负责:
|
|||
|
|
|
|||
|
|
- 统一接口形态。
|
|||
|
|
- 聚合和标准化多个后端返回。
|
|||
|
|
- 减少前端直接理解多个后端协议的复杂度。
|
|||
|
|
|
|||
|
|
在架构里它是非常重要的一层,因为 APP 实际看到的“后端世界”,应该优先由它统一封装,而不是暴露历史系统差异。
|
|||
|
|
|
|||
|
|
#### Workbench Aggregation
|
|||
|
|
|
|||
|
|
这个模块更聚焦首页和工作台聚合能力,典型包括:
|
|||
|
|
|
|||
|
|
- 待办。
|
|||
|
|
- 提醒。
|
|||
|
|
- 门店经营摘要。
|
|||
|
|
- 多来源业务 tile 数据。
|
|||
|
|
|
|||
|
|
它说明首页不是由单一系统直接返回,而是由主后台整合多个来源后下发。
|
|||
|
|
|
|||
|
|
#### WebView Ticket Center
|
|||
|
|
|
|||
|
|
这个模块专门解决 F6 WebView 场景下的入口控制问题,负责:
|
|||
|
|
|
|||
|
|
- 生成或换取 WebView 票据。
|
|||
|
|
- 绑定当前用户和门店上下文。
|
|||
|
|
- 传递 trace 信息。
|
|||
|
|
- 为嵌入式 WebView 提供受控启动入口。
|
|||
|
|
|
|||
|
|
这意味着 APP 打开 F6 WebView 时,并不是裸跳 URL,而是先由主后台准备好上下文和票据条件。
|
|||
|
|
|
|||
|
|
### 4.4 Integration Layer:集成适配层
|
|||
|
|
|
|||
|
|
第四层是 `Integration Layer`。
|
|||
|
|
|
|||
|
|
这一层存在的意义,是把供应商接入复杂性控制在一个专门层里,而不是扩散进整个业务系统。
|
|||
|
|
|
|||
|
|
包含两个关键组件:
|
|||
|
|
|
|||
|
|
- `F6 Integration Adapter`
|
|||
|
|
- `Timeout / Retry`
|
|||
|
|
|
|||
|
|
#### F6 Integration Adapter
|
|||
|
|
|
|||
|
|
它负责:
|
|||
|
|
|
|||
|
|
- 换票。
|
|||
|
|
- 供应商访问上下文准备。
|
|||
|
|
- 将主后台调用收口到统一适配出口。
|
|||
|
|
|
|||
|
|
本质上它是主后台访问 F6 的统一适配出口。
|
|||
|
|
|
|||
|
|
#### Timeout / Retry
|
|||
|
|
|
|||
|
|
这部分表达的是供应商链路治理能力,包括:
|
|||
|
|
|
|||
|
|
- 超时控制。
|
|||
|
|
- 重试策略。
|
|||
|
|
|
|||
|
|
因为 F6 是外部能力域,不稳定性和响应波动风险都比内部模块更高,所以这里保留最关键的超时和重试治理。
|
|||
|
|
|
|||
|
|
### 4.5 Mini Program Backend:历史后台层
|
|||
|
|
|
|||
|
|
第五层是 `Mini Program Backend`。
|
|||
|
|
|
|||
|
|
这一层包含:
|
|||
|
|
|
|||
|
|
- `O2O Backend`
|
|||
|
|
- `Warranty Backend`
|
|||
|
|
- `Retail Store Backend`
|
|||
|
|
- `ROOS Backend`
|
|||
|
|
|
|||
|
|
其中 `Retail Store Backend` 对应原“马上下单”相关的门店、人员、地址和资料维护能力,命名上按业务域表达为门店基础资料后台。
|
|||
|
|
|
|||
|
|
这层的架构含义不是“这些服务很次要”,而是:
|
|||
|
|
|
|||
|
|
- 它们继续承担原有业务责任。
|
|||
|
|
- 它们可以是数据主来源。
|
|||
|
|
- 但移动端调用它们时,优先通过主后台聚合。
|
|||
|
|
|
|||
|
|
这页里灰色虚线从 `BFF Orchestration` 向下扇出,就是在表达:
|
|||
|
|
|
|||
|
|
- 主后台聚合多个 Mini 域。
|
|||
|
|
- 主后台对外统一返回。
|
|||
|
|
- APP 不应把它们当多个主后台直接使用。
|
|||
|
|
|
|||
|
|
### 4.6 F6 Supplier Domain:供应商能力层
|
|||
|
|
|
|||
|
|
右侧是 `F6 Supplier Domain`。
|
|||
|
|
|
|||
|
|
这里分成两个主要能力:
|
|||
|
|
|
|||
|
|
- `F6 WebView Pages`
|
|||
|
|
- `F6 Capability APIs`
|
|||
|
|
|
|||
|
|
它们分别对应两种不同访问模式:
|
|||
|
|
|
|||
|
|
#### F6 WebView Pages
|
|||
|
|
|
|||
|
|
用于页面嵌入场景,例如:
|
|||
|
|
|
|||
|
|
- 销售开单。
|
|||
|
|
- 扫码。
|
|||
|
|
- 结算。
|
|||
|
|
- 入库。
|
|||
|
|
|
|||
|
|
访问特点是:
|
|||
|
|
|
|||
|
|
- 页面最终可能由移动端 WebView 直接打开。
|
|||
|
|
- 但打开前需要经过主后台准备票据和上下文。
|
|||
|
|
- 域名必须在 Allowlist 中。
|
|||
|
|
|
|||
|
|
#### F6 Capability APIs
|
|||
|
|
|
|||
|
|
用于系统间能力调用,例如:
|
|||
|
|
|
|||
|
|
- 采购。
|
|||
|
|
- 促销。
|
|||
|
|
- ERP 补充能力。
|
|||
|
|
|
|||
|
|
访问特点是:
|
|||
|
|
|
|||
|
|
- 前端不能直接调用。
|
|||
|
|
- 只能从 `App Backend -> Integration Adapter -> F6 APIs` 发起。
|
|||
|
|
|
|||
|
|
### 4.7 External Services:外部服务层
|
|||
|
|
|
|||
|
|
底部右侧是 `External Services`,包括:
|
|||
|
|
|
|||
|
|
- `SMS`
|
|||
|
|
- `Marketing / CRM`
|
|||
|
|
- `WeCom`
|
|||
|
|
|
|||
|
|
这说明 APP 主后台除了对接历史内部域和供应商域外,也会调用一些外部平台服务。
|
|||
|
|
|
|||
|
|
这些服务通常承担:
|
|||
|
|
|
|||
|
|
- 短信验证码。
|
|||
|
|
- 营销或客户关系数据。
|
|||
|
|
- 企业协同消息。
|
|||
|
|
|
|||
|
|
它们本质上也是外部依赖,因此在架构里被单独表达,而不是混在主后台内部。
|
|||
|
|
|
|||
|
|
### 4.8 Cross-Cutting:横切关注点
|
|||
|
|
|
|||
|
|
右上方还有一组 `Cross-Cutting` 模块:
|
|||
|
|
|
|||
|
|
- `Observability`
|
|||
|
|
- `Audit / Security`
|
|||
|
|
- `Config Center`
|
|||
|
|
|
|||
|
|
这些不是某个独立业务流程,而是所有流程都必须共享的治理能力。
|
|||
|
|
|
|||
|
|
#### Observability
|
|||
|
|
|
|||
|
|
负责:
|
|||
|
|
|
|||
|
|
- Trace ID
|
|||
|
|
- 日志
|
|||
|
|
- 指标
|
|||
|
|
|
|||
|
|
确保跨域链路可追踪。
|
|||
|
|
|
|||
|
|
#### Audit / Security
|
|||
|
|
|
|||
|
|
负责:
|
|||
|
|
|
|||
|
|
- 敏感信息控制。
|
|||
|
|
- 关键行为留痕。
|
|||
|
|
- 审计证据保留。
|
|||
|
|
|
|||
|
|
#### Config Center
|
|||
|
|
|
|||
|
|
负责:
|
|||
|
|
|
|||
|
|
- 菜单配置。
|
|||
|
|
- 开关配置。
|
|||
|
|
- WebView 入口策略。
|
|||
|
|
|
|||
|
|
这部分说明 APP 平台不是硬编码系统,而是需要较强配置化能力支撑运营和演进。
|
|||
|
|
|
|||
|
|
### 4.9 第二页想强调的核心结论
|
|||
|
|
|
|||
|
|
第二页最终想让读图人形成以下认知:
|
|||
|
|
|
|||
|
|
- 客户端只有一个统一入口。
|
|||
|
|
- 安全和接入必须前置。
|
|||
|
|
- 主后台必须承担统一 BFF 和统一上下文职责。
|
|||
|
|
- 供应商接入必须通过适配层治理。
|
|||
|
|
- 历史 Mini 域继续存在,但面向 APP 的输出需要经由主后台整合。
|
|||
|
|
- 所有跨域链路都要可观测、可审计、可配置、可降级。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. 第三页:Key Flows and Context Governance 详细说明
|
|||
|
|
|
|||
|
|
第三页是运行时流程图。它不是在重新画系统结构,而是在解释:
|
|||
|
|
|
|||
|
|
“当业务真实运行起来时,这套架构的关键行为是怎么发生的?”
|
|||
|
|
|
|||
|
|
这一页选了 4 条最关键的流程:
|
|||
|
|
|
|||
|
|
- `Flow 1 Login and Store Context Bootstrap`
|
|||
|
|
- `Flow 2 F6 WebView Launch and Session Rules`
|
|||
|
|
- `Flow 3 Home Aggregation and Mini Compatibility`
|
|||
|
|
- `Flow 4 Hybrid Procurement and Inbound Flow`
|
|||
|
|
|
|||
|
|
同时底部补充统一治理规则。
|
|||
|
|
|
|||
|
|
### 5.1 Flow 1:Login and Store Context Bootstrap
|
|||
|
|
|
|||
|
|
这条流程解释登录后的上下文建立过程。
|
|||
|
|
|
|||
|
|
流程步骤是:
|
|||
|
|
|
|||
|
|
1. `App Login`
|
|||
|
|
2. `Token Issue`
|
|||
|
|
3. `Store List + Default Store`
|
|||
|
|
4. `Menu / Permission / Config Baseline`
|
|||
|
|
5. `Context Established`
|
|||
|
|
|
|||
|
|
这个流程在架构上的真正含义不是“登录成功返回 token”这么简单,而是:
|
|||
|
|
|
|||
|
|
- 用户身份只是第一步。
|
|||
|
|
- 系统真正可运行还需要建立当前门店上下文。
|
|||
|
|
- 菜单、权限和配置要跟门店和角色一起确定。
|
|||
|
|
- APP 登录后不是只有一个用户态,而是一个“用户 + 门店 + 角色 + 菜单 + 配置”的完整工作上下文。
|
|||
|
|
|
|||
|
|
所以这条流程强调的是:
|
|||
|
|
|
|||
|
|
- `Store Context` 是核心控制对象。
|
|||
|
|
- 登录完成不代表业务上下文完成。
|
|||
|
|
- APP 中很多行为都依赖这一步建立出的当前门店语义。
|
|||
|
|
|
|||
|
|
### 5.2 Flow 2:F6 WebView Launch and Session Rules
|
|||
|
|
|
|||
|
|
这条流程解释 F6 WebView 嵌入为什么是“例外链路但仍然受控”。
|
|||
|
|
|
|||
|
|
流程步骤是:
|
|||
|
|
|
|||
|
|
1. `App asks for WebView entry`
|
|||
|
|
2. `Backend exchanges / prepares ticket`
|
|||
|
|
3. `Embedded open in WebView`
|
|||
|
|
|
|||
|
|
并补充 3 条强规则:
|
|||
|
|
|
|||
|
|
- `Store switch invalidates WebView`
|
|||
|
|
- `Expired ticket needs refresh`
|
|||
|
|
- `Failure fallback shows safe message + trace ID`
|
|||
|
|
|
|||
|
|
这条流程表达的重点有 4 个:
|
|||
|
|
|
|||
|
|
#### 第一,WebView 入口必须由主后台签发
|
|||
|
|
|
|||
|
|
APP 不是拿到一个 URL 就直接打开,而是要先通过主后台获取受控入口。
|
|||
|
|
|
|||
|
|
#### 第二,WebView 会话受当前门店上下文约束
|
|||
|
|
|
|||
|
|
如果用户切换门店,当前 WebView 会话不能继续沿用旧上下文,否则会造成门店数据串用和权限风险。
|
|||
|
|
|
|||
|
|
#### 第三,票据是时效性的
|
|||
|
|
|
|||
|
|
过期票据需要刷新,而不是无限复用。
|
|||
|
|
|
|||
|
|
#### 第四,失败时必须可支持排障
|
|||
|
|
|
|||
|
|
如果 F6 打不开,不能只给用户一个空白页或技术错误,而是要给出安全提示并带 trace 信息,方便客服、研发和集成排查。
|
|||
|
|
|
|||
|
|
### 5.3 Flow 3:Home Aggregation and Mini Compatibility
|
|||
|
|
|
|||
|
|
这条流程解释首页工作台为什么一定是聚合页,而不是某个单体后端直接吐数据。
|
|||
|
|
|
|||
|
|
流程步骤是:
|
|||
|
|
|
|||
|
|
1. `Workbench request`
|
|||
|
|
2. `Backend aggregates O2O / Warranty / ROOS / Config`
|
|||
|
|
3. `Partial failure returns degradable tiles`
|
|||
|
|
4. `Legacy Mini direct access is compatibility only`
|
|||
|
|
|
|||
|
|
这条流程的重点非常明确:
|
|||
|
|
|
|||
|
|
#### 第一,首页是聚合结果
|
|||
|
|
|
|||
|
|
首页的数据来源天然分散,不可能全部只来自一个系统。
|
|||
|
|
|
|||
|
|
#### 第二,主后台要负责标准化
|
|||
|
|
|
|||
|
|
不同 Mini 域返回结构、状态和错误处理方式可能不同,需要统一加工后再交给 APP。
|
|||
|
|
|
|||
|
|
#### 第三,降级方式必须是“局部降级”
|
|||
|
|
|
|||
|
|
如果其中一个来源失败,不应该让整个首页白屏,而应该:
|
|||
|
|
|
|||
|
|
- 哪个 tile 有问题就降级哪个 tile。
|
|||
|
|
- 其他可用部分继续返回。
|
|||
|
|
|
|||
|
|
#### 第四,历史直连不是默认解法
|
|||
|
|
|
|||
|
|
即使某些 Mini 场景短期仍保留兼容直连,也应明确标记为历史兼容路径,而不是继续作为新功能访问方式。
|
|||
|
|
|
|||
|
|
### 5.4 Flow 4:Hybrid Procurement and Inbound Flow
|
|||
|
|
|
|||
|
|
这条流程解释采购和入库为什么是“混合模式”。
|
|||
|
|
|
|||
|
|
流程步骤是:
|
|||
|
|
|
|||
|
|
1. `Retail store context + permission + normalization`
|
|||
|
|
2. `F6 owns procurement / promotion / ERP`
|
|||
|
|
3. `Inbound execution uses WebView or API path`
|
|||
|
|
4. `Historical data may still come from Mini aggregation`
|
|||
|
|
|
|||
|
|
这条流程在业务上很关键,因为它说明采购和入库类能力并不是纯内部能力,也不是纯供应商能力,而是一个混合场景。
|
|||
|
|
|
|||
|
|
它的架构含义是:
|
|||
|
|
|
|||
|
|
- 主后台负责上下文、权限和统一口径。
|
|||
|
|
- F6 负责其擅长和实际拥有的供应商能力。
|
|||
|
|
- 页面型操作可能通过 WebView 完成。
|
|||
|
|
- 接口型能力通过适配层访问。
|
|||
|
|
- 部分历史辅助数据可能仍来自 Mini 域聚合。
|
|||
|
|
|
|||
|
|
这也解释了为什么:
|
|||
|
|
|
|||
|
|
- 不能把 F6 当主后台。
|
|||
|
|
- 也不能假装采购和入库完全脱离 F6。
|
|||
|
|
- 更不能让前端自己到处直连多个系统完成业务。
|
|||
|
|
|
|||
|
|
正确解法是由主后台掌控主流程,由供应商承接其能力边界内的部分。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. 底部治理规则和线段语义在告诉我们什么
|
|||
|
|
|
|||
|
|
第三页底部的 `Shared Governance Rules`、`Route Semantics` 和 `Review checks` 不是补充装饰,而是整套架构落地的检查清单和读图规则。
|
|||
|
|
|
|||
|
|
### 6.1 Shared Governance Rules
|
|||
|
|
|
|||
|
|
这里明确了 4 条总规则:
|
|||
|
|
|
|||
|
|
- `Store context is owned by App Backend`
|
|||
|
|
- `F6 WebView is an embedded exception`
|
|||
|
|
- `Mini systems remain independent`
|
|||
|
|
- `Every degraded or supplier-facing failure returns a user-safe message and a trace ID`
|
|||
|
|
|
|||
|
|
它们分别约束:
|
|||
|
|
|
|||
|
|
- 上下文归属。
|
|||
|
|
- 例外链路边界。
|
|||
|
|
- 历史系统独立性。
|
|||
|
|
- 失败处理方式。
|
|||
|
|
|
|||
|
|
### 6.2 Route Semantics
|
|||
|
|
|
|||
|
|
这里用线段样例说明第三页所有关键链路的读法:
|
|||
|
|
|
|||
|
|
- `Primary App route`
|
|||
|
|
对应蓝色实线,表示 APP 到主后台的标准主链路。
|
|||
|
|
- `F6 embedded / exception`
|
|||
|
|
对应橙色虚线,表示 F6 WebView 嵌入、票据换取或供应商例外链路。
|
|||
|
|
- `Aggregation / external`
|
|||
|
|
对应灰色虚线,表示主后台向 Mini 域、外部服务或聚合来源发起的访问。
|
|||
|
|
- `Legacy compatibility`
|
|||
|
|
对应红色点线,表示历史兼容路径,只能作为过渡保留,不能作为新功能默认链路。
|
|||
|
|
|
|||
|
|
这部分和第二页的图例保持一致,目的是让评审人员在看流程图时能直接区分“主链路、例外链路、聚合链路、历史链路”,避免把 F6 WebView 或 Mini 直连误解成默认访问方式。
|
|||
|
|
|
|||
|
|
### 6.3 Review Checks
|
|||
|
|
|
|||
|
|
这里的检查项可以直接作为评审问题来问:
|
|||
|
|
|
|||
|
|
1. 门店切换是否会关闭当前供应商 WebView 会话。
|
|||
|
|
2. 首页失败是否按 tile 降级而不是整页失败。
|
|||
|
|
3. 采购和入库是否保持 F6-first 的供应商能力归属。
|
|||
|
|
4. Mini 直连是否被严格控制为过渡链路。
|
|||
|
|
|
|||
|
|
如果某个新需求或技术方案违反了这里的检查项,通常意味着它已经偏离当前架构原则。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. 为什么必须这样设计
|
|||
|
|
|
|||
|
|
这套架构不是为了“画得好看”,而是为了解决当前业务现实中的几个核心问题。
|
|||
|
|
|
|||
|
|
### 7.1 解决多入口和多后台混乱
|
|||
|
|
|
|||
|
|
历史上不同能力分散在多个小程序和后台里,APP 如果继续直接对接多个后端,移动端复杂度会越来越高。
|
|||
|
|
|
|||
|
|
统一 `App Backend` 作为主后台后,可以:
|
|||
|
|
|
|||
|
|
- 收敛前端访问入口。
|
|||
|
|
- 统一账号和门店上下文。
|
|||
|
|
- 统一权限和配置。
|
|||
|
|
|
|||
|
|
### 7.2 保留历史资产而不是强行推倒重来
|
|||
|
|
|
|||
|
|
Mini Program Backend 仍然保留业务边界,避免为了“统一”而做不现实的大拆大建。
|
|||
|
|
|
|||
|
|
这使系统具备:
|
|||
|
|
|
|||
|
|
- 现实可落地性。
|
|||
|
|
- 渐进式演进能力。
|
|||
|
|
- 更低迁移风险。
|
|||
|
|
|
|||
|
|
### 7.3 把 F6 当成供应商能力,而不是主系统
|
|||
|
|
|
|||
|
|
这是整个架构中最重要的认知之一。
|
|||
|
|
|
|||
|
|
因为 F6:
|
|||
|
|
|
|||
|
|
- 不是自有主后台。
|
|||
|
|
- 协议和稳定性不完全可控。
|
|||
|
|
- 同时提供页面和接口两类能力。
|
|||
|
|
|
|||
|
|
所以必须:
|
|||
|
|
|
|||
|
|
- 页面入口受控。
|
|||
|
|
- API 接口后端统一适配。
|
|||
|
|
- 供应商异常和主系统隔离。
|
|||
|
|
|
|||
|
|
### 7.4 支持真实业务运行中的上下文治理
|
|||
|
|
|
|||
|
|
系统不是“登录就结束”,而是多门店、多角色、多链路环境下持续运行。
|
|||
|
|
|
|||
|
|
因此必须把以下能力做成架构级规则:
|
|||
|
|
|
|||
|
|
- 当前门店上下文。
|
|||
|
|
- WebView 会话绑定和失效控制。
|
|||
|
|
- 跨域链路可追踪。
|
|||
|
|
- 失败时可降级、可审计、可支持排障。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8. 读完这 3 页后应该形成的统一认知
|
|||
|
|
|
|||
|
|
如果要用一句话总结这 3 页图,它表达的是:
|
|||
|
|
|
|||
|
|
“Continental Retail APP 是一个以 `App Backend` 为统一主后台、以 `Mobile App` 为统一入口、以 `Mini Program Backend` 为保留独立历史域、以 `F6` 为受控供应商能力域的混合架构系统。”
|
|||
|
|
|
|||
|
|
更具体地说,所有参与方应形成以下共识:
|
|||
|
|
|
|||
|
|
- APP 不是多个后台的并列客户端,而是统一入口。
|
|||
|
|
- `App Backend` 不是普通接口层,而是控制面和编排中心。
|
|||
|
|
- Mini 后台继续存在,但面向 APP 时应优先通过主后台聚合。
|
|||
|
|
- F6 是供应商域,页面和接口都要按受控方式接入。
|
|||
|
|
- 门店上下文是系统运行的核心治理对象。
|
|||
|
|
- 首页聚合必须支持局部降级。
|
|||
|
|
- WebView 是例外链路,不是默认业务通路。
|
|||
|
|
- 所有跨域链路都必须可治理、可观测、可审计。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9. 这份说明适合怎么使用
|
|||
|
|
|
|||
|
|
这份文档适合以下用途:
|
|||
|
|
|
|||
|
|
- 架构评审时作为讲解稿。
|
|||
|
|
- 产品、研发、测试 onboarding 时作为系统认知材料。
|
|||
|
|
- 需求讨论时用于确认是否违反既定架构原则。
|
|||
|
|
- 接口联调前用于统一系统边界和责任分工。
|
|||
|
|
|
|||
|
|
如果后续需要,我还可以继续补两类配套文档:
|
|||
|
|
|
|||
|
|
- 一份“面向评审汇报”的精简版讲稿。
|
|||
|
|
- 一份“按模块拆解”的实现说明,把图里的每个块映射到实际研发任务和接口边界。
|