Name Last Update
deploy Loading commit data...
docs Loading commit data...
engine Loading commit data...
models Loading commit data...
templates Loading commit data...
tests Loading commit data...
web Loading commit data...
.gitignore Loading commit data...
CLAUDE.md Loading commit data...
README.md Loading commit data...
request.txt Loading commit data...
start.sh Loading commit data...

README.md

本体驱动 DDD+EDA · 元数据解释引擎(可运行 Demo)

一份完整的前后端,一个能运行的网页:网页上可操作「新增订单」,且该操作完全由 models/ 下的 YAML 本体模型驱动——改了模型文件,前端表单与后端执行的操作定义同时改变,无需改一行代码

本项目按 request.txt 的 11 层本体模型(M0–M8、MetaRule)落地为一个元数据驱动系统:

  • 后端 = 架构解释引擎(Java 21 + Spring Boot 3.5):启动时加载 YAML,构建内存元模型,用通用命令执行器解释执行 CreateOrder(无任何订单专用业务代码)。
  • 前端 = 通用渲染引擎(React 18 + Ant Design 5 + Vite):读取 M8 模板 + 后端合成的元数据,动态渲染「新增订单」页并提交到通用命令 API。

一、快速运行

前置:Java 21+、Node 18+、npm(Maven 无需预装——项目内含 ./mvnw 包装器,首次运行自动下载 Maven 3.9.9 与全部依赖;本机实测 Java 25 + Node 26 亦可)。

./start.sh

脚本会:启动后端(8080) → 等待就绪 → 安装前端依赖 → 启动前端(Vite)。 浏览器打开 Vite 提示的 Local 地址(默认 http://localhost:5173,被占用则顺延如 5174),进入「用户创建订单完整流程」页即可操作新增订单

分别启动(调试用):

# 终端 A —— 后端(用包装器,无需预装 Maven)
cd engine && ./mvnw spring-boot:run
# 终端 B —— 前端
cd web && npm install && npm run dev

默认存储为 H2 内存库(MySQL 兼容模式),零外部依赖开箱即跑;H2 控制台 http://localhost:8080/h2-console(JDBC URL: jdbc:h2:mem:trade_db,用户 sa,空密码)。


二、验证「改了模型文件 → 操作定义随之改变」(核心验收点)

系统的关键在于行为源于模型、而非代码。三种典型验证(改完点页面右上「热重载模型」或 curl -X POST localhost:8080/api/meta/reload -H 'X-Principal: backend_admin',无需重启;热重载仅管理员可触发):

  1. 改前端表单(M8):编辑 models/M8-front-schema.yaml,把某组件 compType: input 改成 select、改 formLabel、增删组件或改 span → 热重载 → 「新增订单」页对应字段的控件类型/标签/布局立即改变
  2. 改风控规则(MetaRule):编辑 models/MetaRule-business.yaml,把 single_order_max_amount50000 改成 100 → 热重载 → 普通用户下单金额超 100 即被 REJECT(同一笔请求从通过变为拦截)。
  3. 改领域字段类型(M1):编辑 models/M1-domain.yaml,把某字段 type: string 改成 int → 热重载 → 该字段的输入控件类型随之改变(配合 M3 增列后即可落库)。

curl 复现规则 2:见 tests/verify-model-change.sh


三、目录结构

onto-implementation/
├── models/                     # ★ 唯一事实源:11 份本体 YAML(M0–M8、MetaRule)
├── engine/                     # 后端解释引擎(Spring Boot)
│   └── src/main/java/com/onto/engine/
│       ├── model/              # 元模型加载与类型化查询 (ModelRepository)
│       ├── meta/               # 场景渲染 Schema 合成 (SceneSchemaService)
│       ├── command/            # ★ 通用命令执行器 (CommandEngine)
│       ├── rule/               # Aviator MetaRule 引擎 (RuleEngine)
│       ├── persist/            # 据 M3 动态建表/读写 (SchemaInitializer/DynamicRepository)
│       ├── event/              # Outbox + 跨聚合最终一致 (EventEngine)
│       ├── security/           # M5 脱敏 (MaskService)
│       └── web/                # REST 控制器
├── web/                        # 前端通用渲染引擎(React + Vite)
│   └── src/
│       ├── engine/             # ★ SchemaRenderer / FieldControl(组件注册表)
│       ├── panels.tsx          # 执行追踪 / 溯源 / 模型查看器 / 订单事件
│       └── App.tsx
├── templates/                  # 代码生成模板(M1→DDL、M2→命令、M8→React 组件)
├── deploy/                     # 生产部署(docker-compose:MySQL8 + RocketMQ + Nginx)
├── docs/                       # 场景推演文档(架构运行原理)
├── tests/                      # 验证脚本
└── start.sh

四、架构分层与引擎如何"解释执行"

职责 引擎如何使用
M0 meta-schema 全域校验根规范 描述所有层的 JSON Schema,CI 可据此校验 YAML
M1 domain DDD 聚合唯一数据源 字段类型、组合子实体结构 → 前端控件类型 / DDL / 值转换
M2 command 聚合命令入参/校验/事件 通用执行器据此校验入参、决定发何事件
ME event EDA 事件与跨聚合一致性 Outbox 事件定义 + OrderCreated→StockDeduct
M3 deploy 实体↔表/字段映射、命令 API 自动建表、动态 SQL、前端命令 URL
M4 scene Saga 流程编排 通用执行器逐 flowSteps 解释:readOnlyCheck→bindCommand→return
M5 security 权限/脱敏 权限校验、敏感字段掩码渲染
M6 monitor 监控告警 指标/告警规范(文档态)
M7 sla 流量/熔断 SLA 规范(文档态)
MetaRule 前后端统一动态规则 Aviator 实时执行:REJECT/ALERT,前后端同源
M8 front-schema React 拖拽页面模板 ★ 前端渲染引擎读取它动态生成整页

「新增订单」端到端(SCENE_CREATE_ORDER): 权限(M5) → readOnlyCheck 客户存在(M4/M1) → 入参校验(M2/M8) → 风控(MetaRule) → 落库(M3) → 发事件(ME/Outbox) → 跨聚合扣库存(ME 最终一致)。 页面右侧「执行追踪」把每一步及其来源层实时可视化。

详见 docs/场景推演.md


五、主要 API

方法 路径 说明
GET /api/meta/scenes 场景列表(M4)
GET /api/meta/scene/{sceneId} 场景渲染 Schema(M8+M1+M2+M3+M5+MetaRule 合成)
GET /api/meta/model/{code} 查看某层模型解析内容(M0..M8/MetaRule)
POST /api/meta/reload 热重载全部 YAML(改模型即时生效)
GET /api/data/{aggregateId} 引用下拉数据源(客户/商品,含脱敏)
POST /api/scene/{sceneId}/precheck 提交前预检(校验+MetaRule 风控,不落库)
POST /api/scene/{sceneId}/execute 通用执行场景命令(完整解释执行)

六、通用性与安全边界(诚实说明)

经 2026-07-20 审计后本轮"全面改造":把原先散落在 Java/TS 里的业务字面量上移为可机器读的本体元数据 (M1 constraints、M2 commandType/effect/derivations、ME sourceItemEntity/paramMap), 使校验、风控、跨聚合一致性、落库分派全部模型驱动。因此新增第二个聚合/场景(如已内置的"新增客户") 或重命名字段,通常只改 YAML。逐条整改见 docs/审计整改说明.md

仍为演示简化(未做成生产级,明确标注)

  • 认证:未接入 OAuth2/JWT;主体来自 X-Principal 头(可伪造),仅演示 M5 权限"通过/拒绝"分支。热重载/新增客户已要求管理员主体。生产必须换真实认证。
  • 幂等:命令未加请求幂等键。
  • M0 校验:M0 仍为规范文档,未在加载时对各层做 JSON-Schema 强校验。

M8 补全后四个场景(新增订单/新增客户/修改地址/取消订单)均可渲染并端到端可用:update 命令含子实体更新、cancel 走通用 StockReturn 回补库存(均有测试)。

七、生产化部署(本机为轻量可跑版)

为保证"本机开箱即跑",Demo 采用 H2 内存库 + 进程内 Outbox/事件总线 + 真实 Aviator 规则引擎 + 真实字段加密。 生产映射(真 MySQL8 + RocketMQ + Nginx)见 deploy/docker-compose up 拉起完整栈,后端切 prod profile 连真中间件、收紧 CORS、禁用 H2 控制台、要求经环境/密管注入 DB 口令与加密密钥;YAML 驱动逻辑与规则引擎完全一致、无需改动