📌 摘要
业务模块是"做什么",技术分层是"怎么做"。真正强韧的企业系统,需要把二者织成一张"架构矩阵网"。本文用通俗而专业的方式,构建从原则、反模式、契约治理到 AI 原生能力的全链路方法论;附带 SOP、模板、度量与 90 天落地计划,帮助团队快速从"知道"走到"做到",再沉淀为"可复制"。适合平台工程、EA、架构与治理团队完整采纳。
- 关键词:架构矩阵|业务模块|技术分层|契约治理|AI 原生
🧭 导航
- 为什么要有"架构矩阵"
- 横向:业务模块分而有界
- 纵向:技术分层各司其职
- 经纬交错:矩阵化组织与演进
- 反模式与止损
- 契约治理与事件协同
- AI 原生架构与治理闭环
- 90 天落地计划
- 可复用资产与自检清单
一、为什么需要"架构矩阵"
企业里最常见的两类失败:只重技术分层,忽视业务边界;或只按功能切模块,却把层次混成"一锅粥"。"架构矩阵"揭示的是双维度的组织方式:横向以业务限界上下文为单位切割,纵向以职责与抽象分层。二者相乘,为每个业务模块内置完整的技术栈骨架,实现"自治 + 契约协作"。
- 收益一: 高内聚低耦合,团队与模块一一映射,发布与演进可控。
- 收益二: 治理可视化,依赖与契约可审计,质量门禁具象化。
- 收益三: 扩展有序,新增能力只需复制骨架与契约,不侵扰存量系统。
二、横向|业务模块分而有界
2.1 划分原则(可作为评审表头)
- 价值链优先: 以业务价值流与领域语言切割,避免"功能菜单式"分割。
- 限界上下文: 同一上下文内部保持统一模型,跨上下文以契约交互。
- 数据主权: 数据写入权归属单一模块,跨域读尽量经查询视图或事件。
- 协作方式: 优先事件编排(异步),次之 API(同步),避免共享库耦合。
- 团队映射: 1 模块 ≈ 1 团队,明确责任、预算与 SLO。
2.2 模块蓝本表(示例:通信平台场景)
模块 | 核心能力 | 主要实体 | 对外接口 | 协作方式 | 变更频率 | 负责人 |
---|---|---|---|---|---|---|
短信发送管理 | 任务编排、回执跟踪、重试策略 | 短信任务、回执 | SendSMS v2 | 事件优先 | 高 | A |
流程审批 | 模型、节点分配、策略 | 审批单、节点 | Approve v1 | API/事件 | 中 | B |
账号与通道 | 账户、签名、配额、路由 | 账户、通道 | Account v1 | API | 中 | C |
计量计费 | 用量计量、对账、账单 | 计量、结算 | Billing v1 | 事件优先 | 中 | D |
风控与合规 | 黑白名单、频控、审计 | 规则、告警 | Risk v1 | 内联库/事件 | 中 | E |
配置与权限 | 参数、策略、RBAC | 配置、角色 | Config v1 | API | 低 | F |
提示:每个模块拥有自己的数据模型、版本化接口与发布节奏。
三、纵向|技术分层各司其职
3.1 分层职责表
层级 | 作用 | 产物 | 约束 |
---|---|---|---|
表现层 Presentation | 协议适配、输入校验、DTO | Controller、DTO、BFF | 不包含业务逻辑 |
应用层 Application | 用例编排、事务、跨模块协作 | App Service、Command、Saga | 不访问基础设施实现 |
领域层 Domain | 不变量、聚合、领域服务 | Entity、ValueObject、DomainService | 纯净无框架依赖 |
基础设施 Infrastructure | 存储、消息、第三方 | RepositoryImpl、Gateway、Mapper | 只实现抽象接口 |
3.2 依赖原则
- 自上而下: 上层依赖下层抽象,不依赖实现。
- 禁止穿透: 表现层不得直达仓储,跨模块协作只在应用层发生。
- 适配器隔离: 外部系统经适配器进入应用,用抽象封装差异。
- 契约为王: 交互以 API/事件契约为边界,禁止共享内部实体或库。
四、经纬交错|矩阵化组织与演进
账号通道模块 审批流程模块 短信发送模块 API/事件 API/事件 事件 基础设施 领域层 应用层 表现层 基础设施 领域层 应用层 表现层 基础设施 领域层 应用层 表现层
- 模块内闭环: 每个模块自带全栈分层,自主测试与发布。
- 模块间协作: 通过应用层以契约通信,避免跨层、跨域硬依赖。
- 矩阵演进: 新增模块 = 复制骨架 + 生成契约 + 接入治理,无需侵入存量。
五、反模式雷区与止损战术
5.1 三大误区
-
误区一:层与模块混放
- 症状:项目结构按 controller/service/entity 平铺,全模块混杂。
- 结果:责任不清、发布耦合、影响面难控。
- 止损:按模块归档,再在模块内部按"表现/应用/领域/基础设施"四层重排。
-
误区二:跨层直达
- 症状:Controller 直接调用 Mapper/Repository。
- 结果:事务与逻辑散落,测试与审计困难。
- 止损:路由到应用层,仓储只暴露抽象接口,禁用实现注入到表现层。
-
误区三:跨模块耦合
- 症状:Domain 调用另一个 Domain 或共享实体。
- 结果:上下文侵蚀,变更雪崩。
- 止损:跨模块协作上移到应用层,走 API 或事件;共享的只允许契约与 DTO。
5.2 结构改造示例
text
src/main/java/com/app/
├── sending/ # 模块:短信发送
│ ├── presentation/
│ ├── application/
│ ├── domain/
│ └── infrastructure/
├── workflow/ # 模块:审批流程
└── account/ # 模块:账号通道
六、契约治理与事件协同
6.1 契约类型与版本策略
契约类型 | 用途 | 版本策略 | 向后兼容 | 退役策略 |
---|---|---|---|---|
同步 API | 查询/强一致流程 | v1, v2 并行 | 通过字段可选、默认值 | 设定 sunset 日期与告警 |
异步事件 | 通知/解耦编排 | schema 版控 | 新字段只增不删 | 消费组观测与灰度 |
批量文件 | 大批量对账 | 模板号 + 日期 | 保持字段顺序与类型 | 明确数据字典变更窗口 |
- 字段演进: 只增不删,禁改语义;废弃用 deprecated 标注,设"日落期"。
- 错误模型: 统一错误码/错误语义,避免混用 HTTP 与业务码。
6.2 事件风格选择
场景 | 建议模式 | 理由 | 风险控制 |
---|---|---|---|
任务回执 | 事件驱动 | 解耦吞吐高 | 幂等键 + 去重表 |
计量计费 | 事件溯源 | 重放校验 | 事件不可变存档 |
权限查询 | 同步 API | 强一致与权限校验 | 限流 + 缓存 |
审批触发 | Saga/编排 | 跨域事务 | 可补偿与超时策略 |
6.3 契约门禁流水线(Dev → Stage → Prod)
通过 拒绝 提交契约变更 PR Schema 校验/示例校验 Breaking Change 检测 生成 SDK/DTO 工件 退回修改 合规扫描/PII 标注 发布候选版/灰度 监控告警与回滚预案
- 必备度量: 契约覆盖率、Breaking Change 拦截率、灰度失败率、回滚时长。
七、AI 原生:从嵌入到治理闭环
7.1 AI 增能的三个层级
- 嵌入层(In-app AI): 用例内嵌智能(校对、路由、参数推荐)。
- 中台层(AI 服务化): 提供统一推理网关、提示模板、模型治理。
- 治理层(AIOps/ModelOps): 观测、评测、对齐、审计与预算管控。
7.2 在矩阵中的安放位次
业务模块 适配器 回路 注入 基础设施 领域层 应用层 表现层 AI 推理网关 评测与观测 提示模板库
- 建议: AI 能力以"基础设施适配器 + 应用层编排"方式接入,避免污染领域层。
- 提示模板治理: 版本化、AB 实验、评测基准与数据脱敏。
- 评测与观测: 任务通过率、漂移检测、幻觉率、延迟 P95、单位成本。
7.3 AI 原生模式清单
- 智能路由: 根据通道健康度、历史成功率与成本,AI 评分 → 应用层策略选择 → 领域落账。
- 风险判别: 文本分类/实体识别识别违规内容,风险模块给出判决建议,最终裁决在领域层。
- 自动化运维: 事件异常聚合 + 根因建议 + Runbook 半自动执行。
八、落地指南:90 天架构矩阵迁移计划
8.1 里程碑总览
周期 | 目标 | 关键产出 | 验收标准 |
---|---|---|---|
0-2 周 | 现状盘点与边界初划 | 候选模块清单、上下文图 | 主要耦合点识别完成 |
3-4 周 | 目录与骨架重构 | 模块化目录、四层骨架 | 能独立编译/测试 |
5-8 周 | 契约治理接入 | 契约仓库、门禁流水线 | Breaking 拦截率 > 95% |
9-10 周 | 事件协同落地 | 关键流转事件化 | 幂等与去重验证通过 |
11-12 周 | AI 能力试点 | 推理网关与模板库 | 三项评测指标稳定 |
13 周 | 治理闭环 | 度量看板与 SOP | 回滚 ≤ 15 分钟 |
8.2 逐周行动手册(摘要)
-
第 1 周:现状扫描
- 资产: 模块候选表、依赖图(module → module)。
- 动作: 标记"穿透访问""共享实体""跨库写"。
-
第 2 周:边界定稿
- 资产: 限界上下文语义表、主权数据清单。
- 动作: 拉齐词汇表,确定对外交互方式。
-
第 3-4 周:骨架落地
- 资产: 统一脚手架、目录模板、层间接口。
- 动作: 禁止跨层依赖的静态扫描规则上线。
-
第 5-8 周:契约与事件
- 资产: 契约仓库、多语言 SDK、事件字典。
- 动作: 接入 CI 门禁,建立灰度与回滚机制。
-
第 9-10 周:高风险链路迁移
- 资产: 幂等键策略、去重表、死信队列处理 SOP。
- 动作: 重点链路事件化,打压同步耦合。
-
第 11-12 周:AI 试点
- 资产: 推理网关、提示模板、评测集。
- 动作: 小流量 AB,观测延迟与成本。
-
第 13 周:治理闭环
- 资产: 观测看板、周报模板、应急手册。
- 动作: 演练回滚、数据修复与契约退场。
九、可复用资产:脚手架、模板与清单
9.1 模块目录模板
text
<module-name>/
├── presentation/ # 协议适配、DTO、Controller、BFF
├── application/ # Use case、Command、Saga、Orchestrator
├── domain/ # Aggregate、Entity、VO、DomainService
└── infrastructure/ # RepositoryImpl、Gateway、Mapper、Client
9.2 代码骨架片段
java
// application
public interface SendTaskAppService {
TaskId createTask(CreateTaskCommand cmd);
void submit(TaskId id);
}
// domain
public final class SmsTask extends AggregateRoot {
private final TaskId id;
private TaskStatus status;
public void submit() {
Preconditions.checkState(status == CREATED, "illegal state");
this.status = SUBMITTED;
domainEvents.add(new TaskSubmitted(id));
}
}
// infrastructure
public class SmsTaskRepositoryImpl implements SmsTaskRepository {
// 实现持久化与事务细节
}
9.3 契约示例与演进规范
yaml
# events/sms.task.submitted.v1.yaml
name: sms.task.submitted
version: v1
id: string
occurredAt: datetime
attributes:
channel: string
priority: int
semantics:
description: 任务已提交
compatibility:
rule: additive_only
deprecation:
sunset: 2026-12-31
- 演进规则: 只增不删;新增字段必须可选并给出默认;废弃字段加 deprecated 注释与日落期。
9.4 幂等与去重策略模板
场景 | 幂等键 | 去重策略 | 存储 |
---|---|---|---|
同步 API 创建 | 客户端提供 requestId | 先查后写 | 关系库唯一键 |
事件消费 | 事件 id + 消费组 | 消费表记录 | KV/关系库 |
计费累加 | 账期 + 维度键 | 幂等合并 | 事件溯源表 |
9.5 质量门禁规则包
- 依赖扫描: 禁止表现层依赖基础设施实现;跨模块依赖仅限应用层抽象。
- 契约校验: Schema Lint、Breaking Change 检测、示例样本校验。
- 覆盖率门槛: 领域层单测 ≥ 80%,应用层用例测试 ≥ 70%。
- 事务与重试: 跨模块禁用分布式强一致,采用 Saga 或补偿表。
9.6 运维与应急 SOP(摘录)
- 回滚: 版本化契约双读双写 → 新版异常 → 开关切回旧契约/旧路由 → 队列内事件冻结 → 差异对账修复。
- 死信处理: 死信阈值告警 → 有害负载隔离 → 规则更新与重放 → 评测集增量。
- 热点应对: 限流 + 熔断 + 退化路径(缓存读/异步落账)。
9.7 自检清单(上线前 30 分钟)
- 边界: 是否存在跨域写?是否存在共享实体?
- 分层: 表现层是否穿透访问仓储?应用层是否依赖实现?
- 契约: 变更是否兼容?是否设日落期?是否完成告警订阅?
- 数据: 幂等键是否可用?重放是否无副作用?
- 回滚: 功能开关与旧版本可否一键切返?数据对账脚本是否准备?
十、实践案例:短信平台的矩阵化改造(简版)
10.1 痛点
- 耦合: Controller 直连 Mapper,跨模块调用无序。
- 变更风险: 契约文档散落,调用关系不可见。
- 故障处置: 回执洪峰导致重复落账与数据错乱。
10.2 改造动作
- 结构: 三大模块(发送、审批、账号)按四层骨架重排。
- 契约: 事件化"任务创建/提交/回执",API 化"权限与配置"。
- 幂等: 引入 requestId 与事件消费表;回执去重。
- 观测: 关键路径埋点与事件延迟 P95 看板。
- AI: 引入智能路由评分,按成功率/成本/延迟动态选通道。
10.3 结果指标
- 发布解耦: 独立发布占比 90%+。
- 缺陷收敛: 跨模块回归缺陷下降 60%。
- 吞吐提升: 峰值回执处理能力提升 3 倍。
- 成本优化: 通道路由成本下降 15%。
十一、度量与看板建议
维度 | 指标 | 目标线 | 解释 |
---|---|---|---|
架构健康 | 跨层违规率 | < 1% | 由静态扫描产出 |
契约治理 | Breaking 拦截率 | > 95% | 门禁生效度 |
交付效率 | 独立发布占比 | > 80% | 模块自治能力 |
运行质量 | 事件延迟 P95 | < 500ms | 消费链路健康 |
风险控制 | 幂等冲突率 | < 0.1% | 去重与键策略有效 |
AI 价值 | 任务成功率提升 | > 5% | 相对历史基线 |
成本 | 单次任务单位成本 | -10% | 资源与路由优化 |
十二、常见问题与决策要点
- 同步还是异步?
- 规则: 强一致/低延迟 → 同步;可补偿/高吞吐 → 事件。
- 共享库是否允许?
- 规则: 只允许共享"契约 SDK/DTO",禁止共享领域实体与仓储实现。
- 跨模块事务如何保障一致性?
- 规则: Saga/补偿为主,必要时引入 Outbox 与事务消息。
- 如何引入 AI 而不污染领域?
- 规则: AI 在基础设施 + 应用层;领域层只接收判定结果与规则参数。
十三、结语:让架构产生复利
当你把模块边界、分层职责与契约治理织成一张网,团队的协作与信任就有了"物理载体"。每一次新增能力,都不是在系统里"再造混乱",而是在矩阵上"添砖加瓦"。复利来自标准化的骨架、可审计的契约、可回放的事实,以及可评测的智能。让系统既能跑得稳,也能长得快。
附:速用清单与资源卡片
A. 一页速查卡
- 边界优先: 模块 = 上下文 = 团队
- 分层守护: 表现/应用/领域/基础设施
- 契约为王: API/事件版本化 + 门禁
- 数据主权: 跨域只读,写入归属单一
- 事件优先: 幂等键 + 去重表 + 死信
- AI 原生: 网关 + 模板 + 评测 + 观测
- 看板驱动: 指标即路线图
B. 可复制工件目录
- 脚手架: 模块目录 + 分层骨架 + 依赖规则
- 契约仓库: Schema、样例、 SDK 生成
- 事件字典: 名称、语义、版本、日落期
- 门禁规则: 静态扫描、Breaking 检测
- 观测模版: 指标、日志、追踪、告警
- AI 工件: 提示模板、评测集、对齐报告