支撑模块填补横向体验、合规、主数据和连接器能力,但不会替业务模块拥有业务事实。每个模块现在都有独立手册;本页负责解释它们之间的分工和组合方式。
三类能力,一条依赖规则
支撑模块通过公开契约提供能力,业务模块仍拥有业务规则。连接器只翻译协议和错误,不能把厂商模型或 SDK 类型泄漏到 Application。
通用体验与共享数据
| 模块 | 提供 | 典型组合 |
|---|---|---|
| Menu | 菜单目录、导航节点、权限关联 | Authorization 决策可见性,Menu 负责结构 |
| Guidance | 引导、步骤、用户完成状态 | Identity 标识用户,业务模块决定何时展示 |
| Comments | 资源线程、回复、审核 | 通过稳定资源键挂接 Documents、Tickets 等模块 |
| Numbering | 规则化、并发安全的业务编号 | 业务聚合保存生成结果,不把编号当主键 |
| Master Data | 国家、语言、汇率、节假日、通用代码 | 提供共享参考值,不接管模块私有枚举 |
| Document Structure | 文件夹模板、节点、收藏、树形导航 | Documents 管正文和版本,本模块管组织结构 |
治理与智能
| 模块 | 提供 | 上线前必须证明 |
|---|---|---|
| GDPR | 同意、数据主体请求、导出/删除编排 | 各业务域仍执行自身数据检索、保留和删除规则 |
| AI Manage | Provider、凭据、工作区、会话、消息 | 权限、数据最小化、Secret 管理、模型故障降级与审计 |
AI 能力不能把“能访问模型”误写成“可以发送任意业务数据”。GDPR 编排也不能绕过聚合所有权直接删除其他模块的数据。
运维、工具与行业扩展
| 模块 | 边界 |
|---|---|
| Ops Extension | 事件、死信、CAP 失败消息与支持记录的扩展面 |
| Tool Connectors | 平台工具调用的协议、认证、限流和转换 |
| Legal Connectors | 法务外部系统的防腐适配层 |
| Legal Calculators | 规则引擎、三级回退与法律工作台 |
| Industry Extensions | 行业专有能力的隔离落点 |
内容发布与商业交付
| 模块 | 拥有的事实 | 不负责 |
|---|---|---|
| Announcements | 公告生命周期、受众规则与用户已读事实 | 组织成员权威数据、站外通知投递 |
| Release Management | 发布说明、客户端版本目录、灰度与强制升级决策 | 构建产物、应用商店和部署流水线 |
| Commercial Distribution | 私有包下载权益与短期 Feed 凭据 | 运行时授权、NuGet Server 与 Credential Provider |
| License Management | 许可证申请、四眼复核、异步签名与吊销 | 运行时 License 执行、私钥托管与包下载权益 |
这四个模块解决的是不同问题。Commercial Distribution 回答“客户能否下载某个包”,License Management 回答“能否签发并撤销运行时许可证”,Release Management 回答“客户端应不应该升级”,Announcements 则负责“哪些用户当前能看到哪条公告”。它们可以组合,但不能共享一套状态字段或相互替代。
一个组合示例:带评论的受控文档
假设产品需要“用户进入文档树,打开文档并发表评论”:
- Identity 建立调用者和租户上下文,Authorization 判断访问权限。
- Document Structure 返回用户可见的树结构,Documents 返回正文和版本。
- Comments 以稳定资源类型与资源标识挂接线程,不反向持有 Document 聚合。
- Menu 和 Guidance 只改善入口与上手体验,不改变文档权限。
- GDPR 请求到达时,由 GDPR 编排各模块导出或删除自己拥有的数据。
- 全链路记录必要审计字段;任何租户或权限不确定性都失败关闭。
选型时先问四个问题
| 问题 | 选择依据 | 常见误区 |
|---|---|---|
| 谁拥有业务事实? | 聚合与状态机仍放在业务模块 | 把 Comments、Menu 或 Master Data 当通用业务库 |
| 是同步查询还是状态传播? | 即时决策用窄查询端口,状态变化用版本化事件 | 跨模块直接读表或注入对方 Handler |
| 默认实现失败时怎么办? | 安全能力 fail-closed,非关键体验显式降级 | Null Adapter 返回成功导致“假送达” |
| 是否连接外部系统? | 使用防腐层、稳定错误、超时、幂等和可观测重试 | 把 SDK DTO、异常和 Secret 泄漏到 Application |
失败边界
- Menu、Guidance 和 Comments 不得改变资源授权结果;它们只能消费授权结论。
- Numbering 生成失败时,业务聚合不能保存一个看似有效的空编号。
- Master Data 不可用时,调用方必须区分“代码不存在”和“参考数据服务故障”。
- GDPR 删除是跨域编排,不是跨库级联;每个数据 Owner 返回可审计处理结果。
- AI 与连接器调用必须在网络边界之外保留业务幂等与重放依据。
- Ops Extension 记录故障事实,但不能成为 CAP、Job 或 Webhook 的第二状态机。
源码与目录核查
# 支撑/扩展模块均应有独立目录;共享平台项目不应被误计为业务域。find src/Platform -mindepth 1 -maxdepth 1 -type d | sort
# 在源码仓库执行架构测试,在说明书仓库执行模块事实映射。dotnet test tests/BitzOrcas.Architecture.Tests/BitzOrcas.Architecture.Tests.csproj --filter FullyQualifiedName~Modulenpm run verify:module-source上线门禁
- Host 已注册模块和生产适配器;Null/Unavailable 默认实现不会造成假成功。
- 权限、Feature、配置、Seed 与健康检查具有可重复验证证据。
- 持久化数据明确租户、软删除、审计、并发与保留语义。
- 连接器覆盖超时、取消、幂等、有界重试、限流、Secret 和日志脱敏。
- 业务模块与支撑模块之间只使用 Contracts、窄端口或版本化事件。
- 单元、集成、契约和端到端测试覆盖正常路径与失败路径。
变更影响审查
- 新增共享代码值时,先判断它属于 Master Data、模块私有枚举还是配置,避免建立隐性全局字典。
- 新增资源挂接能力时,同时定义资源类型、稳定标识、租户来源、Owner 查询和删除回调。
- 更换连接器时,保持 Application 看到的契约、错误码和幂等语义稳定,并用录制契约验证厂商差异。
- 调整菜单或引导不能成为发布业务功能的唯一开关;运行时 Feature 与授权仍需独立执行。
- 引入 AI 输出时,把模型结果视为不可信输入,经过验证、授权和人工确认后才能改变业务事实。
- 修改保留策略时,同时检查业务表、附件、搜索索引、缓存、审计、导出文件与备份恢复副本。
验收报告还应逐模块记录:默认 Adapter 是否可用、生产 Adapter 的所有者、配置/Secret 来源、健康检查、容量预算、数据保留、故障演练时间与回滚责任人。缺少其中任一项,只能标记为“代码可用”,不能标记为“商业 GA”。
返回 36 个模块目录;需要新增能力时继续阅读新增模块指南和模块依赖图。