摘要
本方案提出一套面向平台型、配置型与复杂业务系统的前端技术架构:能力分层 × 职责解耦 × 上下文契约。体系将前端能力拆分为六层(应用容器、业务编排、业务模型、数据操作、交互能力、基础组件),并以模型优先、操作可配置、上下文契约化为核心,结合 Model Registry、操作 DSL、能力注册器、审计与 CI/CD 流水线,支持低代码、aPaaS 与 AI 驱动场景。文档详细给出接口草案、工程约束、测试策略、迁移路径与风险缓解措施,便于团队在真实项目中快速落地与长期演进。
关键字:aPaaS;前端架构;模型驱动;provide/inject;能力分层;操作 DSL
目录
- 架构总览与设计目标
- 六层能力分层详解(L1--L6)
- 运行时上下文契约化设计(Provide / Inject)
- 业务模型治理与 Model Registry
- 操作 DSL、事务语义与审计链路
- 交互能力化与能力组件体系
- 基础组件库与主题体系化策略
- AI 工程化接入与智能化能力落地
- 测试策略、可观测性与审计实践
- CI/CD、灰度发布与治理流水线
- 迁移策略、实施路线与组织治理
- 风险点、常见问题与缓解措施
- 附录:接口草案、示例配置、ESLint 规则伪代码、契约测试模板
1 架构总览与设计目标
1.1 背景与动机
在企业级平台、SaaS、多租户与低代码场景下,前端不再只是页面渲染层,而是承载业务能力、配置能力与治理能力的关键层。传统页面驱动开发存在重复实现、耦合严重、难以配置化与难以支持 AI 的问题。为此,SPARK 提出"能力分层 × 职责解耦 × 上下文契约"的技术架构,目标是把前端从页面实现升级为应用能力引擎,支持可配置、可组合、可治理、可演进的长期演进路径。
1.2 设计目标
- 职责清晰:每一层只承担明确职责,避免跨层业务逻辑。
- 模型优先:业务模型(Model Meta)先于页面存在,页面为模型视图。
- 契约化上下文 :运行时语义通过
provide/inject传递,避免隐式耦合。 - 能力化交互:交互模式封装为参数化能力组件,支持低代码生成。
- 操作可配置:操作以 DSL 定义,支持事务、幂等、补偿与审计。
- 工程化治理:模型版本化、迁移脚本、契约测试、灰度发布与回滚。
- AI 友好:模型与元数据结构化,便于 AI 生成、校验与智能推荐。
2 六层能力分层详解(L1--L6)
2.1 分层逻辑图
Application Shell 应用容器层
Business Orchestration 业务编排层
Business Model 业务模型层
Data Operation 数据操作层
Interaction Capability 交互能力层
Foundation Components 基础组件层
2.2 L1 应用容器层(Application Shell)
职责:系统级运行时容器,负责路由、菜单、全局布局、应用级上下文(用户、租户、环境)、鉴权入口、应用初始化与全局错误边界。
实现要点:
- 路由守卫:集中处理鉴权、模型预加载、页面级权限检查。
- 初始化流水线:阶段化加载(配置 → 模型元信息 → 权限 → 页面注册),支持异步与失败回退。
- AppContext :只读应用级上下文(通过
provide注入),包含用户、租户、环境、全局配置等低频稳定信息。 - 错误边界:全局错误捕获与降级策略(友好提示、回退页面、日志上报)。
工程实践:
- 把初始化拆成阶段任务,允许按需延迟加载模型或能力。
- 路由守卫只做鉴权与模型预加载,不承载业务逻辑。
- AppContext 使用
Symbolkey 与 TypeScript 接口,配合审计记录provide来源与时间戳。
2.3 L2 业务编排层(Business Orchestration)
职责:页面/模块注册、页面级流程编排、能力组合、页面级权限边界。编排层不处理数据细节,仅负责"如何把能力拼成页面"。
实现要点:
- 页面元数据注册中心:页面以 JSON/YAML 描述注册,包含能力清单、权限策略、流程定义、布局信息。
- 编排解析器:将页面元数据解析为运行时能力树,注入上下文并触发能力加载。
- 轻量流程引擎:支持条件跳转、步骤回退、并行/串行节点、事件触发。
- 页面级权限:用于控制能力是否可见或可执行,细粒度权限交由模型层与操作层处理。
工程实践:
- 页面元数据应可由低代码平台导出并直接注册。
- 编排层提供可视化调试工具,展示能力树、上下文注入与事件流。
- 页面注册支持热更新与灰度切换。
2.4 L3 业务模型层(Business Model)
职责:前端领域模型(Model Meta)定义,包括字段、类型、语义、权限模型、状态规则与业务约束表达。模型是体系核心。
实现要点:
- Model Registry :集中注册表,支持
schemaVersion、历史快照、迁移脚本、灰度发布与回滚。 - 字段元信息:字段类型、格式、校验规则、权限规则、联动规则、默认值等。
- 状态规则引擎:基于模型定义的可见/可编辑/脱敏等状态规则计算。
- 模型 API:提供模型查询、版本查询、差异对比与迁移脚本执行接口。
工程实践:
- 模型变更需走 PR 流程并附带迁移脚本与兼容性说明。
- 字段权限支持表级、字段级与行级策略,前端做 UI 预过滤,后端做最终鉴权。
- Model Registry 提供灰度策略(按租户/用户组/模块)与回滚能力。
2.5 L4 数据操作层(Data Operation)
职责:对业务模型的原子行为定义层,负责 CRUD、校验、操作链、事务控制、批量操作、操作码与行为级权限。
实现要点:
- 操作 DSL:以结构化 DSL(YAML/JSON)定义操作(operationCode、输入、权限、pre/post hooks、transaction、retryPolicy)。
- 事务与补偿:支持本地事务与跨服务补偿(Saga),操作链支持串联与并行。
- 幂等与重试 :通过
transactionId或clientRequestId保证幂等,支持重试策略。 - 操作审计:记录操作码、transactionId、调用者、参数摘要、执行结果、耗时与错误码。
工程实践:
- 前端触发操作时生成
transactionId并记录最小参数摘要(避免敏感数据)。 - 后端为最终鉴权与执行方,前端仅做 UI 预校验与参数收集。
- 操作 DSL 与模型版本绑定,保证操作在模型演进时的可回溯性。
2.6 L5 交互能力层(Interaction Capability)
职责:用户交互模式的能力封装层,将表格、表单、弹窗、向导、批处理等抽象为可参数化能力组件。
实现要点:
- 能力注册器:运行时注册能力实现,支持按需加载与版本管理。
- 能力配置 JSON :能力通过标准化 JSON 配置驱动,引用
modelMeta与fieldRules。 - 能力组合器:L2 层将能力按页面配置组合成完整页面,处理能力间事件总线与上下文注入。
- 可视化配置面板:为低代码场景提供拖拽式配置面板,导出能力配置 JSON。
工程实践:
- 能力实现应尽量无业务状态,状态由上层编排或模型驱动。
- 能力支持热替换、按需加载与版本回退。
- 能力配置应包含权限引用、操作码引用与模型版本依赖。
2.7 L6 基础组件层(Foundation Components)
职责:纯表现层 UI 组件库(Button、Input、Table 等),负责样式、主题与响应式支持。
实现要点:
- 无业务语义:组件不包含业务逻辑,不直接访问数据。
- 受控优先:组件尽量实现受控属性,状态由上层管理。
- Design Tokens:使用 design tokens 管理主题变量与响应式断点。
- 可访问性:遵循 WCAG 基本要求。
- 发布流程:语义化版本、视觉回归测试、兼容性校验。
工程实践:
- 组件库导出样式变量清单,便于低代码平台替换主题。
- 组件变更需通过视觉回归与兼容性测试,提供迁移指南。
3 运行时上下文契约化设计(Provide / Inject)
3.1 设计定位
在 L1--L6 分层体系中,存在大量"与组件位置强相关但不适合通过 props 逐层传递"的信息,例如层级语义、业务模块标识、模型元信息、权限作用域与操作上下文。Vue 3 的 provide/inject 被定义为运行时上下文传递机制 ,用于传递语义化、低频、结构稳定的上下文,而非业务数据本体。
3.2 上下文与数据的严格区分
- 业务数据(Data):通过 props、store(如 Pinia)或 API 流转,通常为高频、响应式数据。
- 运行时上下文(Context) :通过
provide/inject传递,包含层级语义、模型元信息、权限边界等,通常为低频、结构稳定、只读视图。
核心原则 :
provide传递"我处在什么语境",而不是"我持有什么数据"。
3.3 上下文接口与 Keys(工程化约束)
约定 :所有上下文必须使用 Symbol 作为 key,并配合 TypeScript 接口定义,便于静态检查与可维护性。
示例 Keys 与接口(简化):
ts
export const PAGE_CONTEXT = Symbol('PageContext');
export const MODEL_CONTEXT = Symbol('ModelContext');
export const OPERATION_CONTEXT = Symbol('OperationContext');
export interface PageContext {
moduleCode: string;
pageCode?: string;
pageMode: 'config' | 'runtime';
pagePermissions: string[];
providedAt: string;
}
export interface ModelContext {
modelCode: string;
schemaVersion: string;
modelMeta: Record<string, any>;
fieldRules: Record<string, any>;
providedAt: string;
}
export interface OperationContext {
operationCode: string;
transactionId?: string;
rowId?: string;
scope?: 'row' | 'batch' | 'global';
providedAt: string;
}
3.4 工程约束(强制性规范)
为防止 provide/inject 被滥用为隐式全局状态,本体系明确以下约束:
允许:
- 传递层级语义与权限上下文
- 传递业务模型元信息(Meta)
- 低频、结构稳定的数据(只读)
禁止:
- 直接传递业务数据列表 / 表单值
- 承载高频变化的响应式状态(
ref/reactive) - 替代全局状态管理(如 Pinia)
3.5 静态检查与 ESLint 规则建议
- 规则 1 :禁止在
provide中传递ref或reactive对象。 - 规则 2 :强制
provide使用Symbolkey 并引用对应的 TypeScript 接口。 - 规则 3:禁止在上下文中传递大数组或敏感数据(如明文密码、完整用户信息)。
(后文附录给出 ESLint 规则伪代码示例)
3.6 可观测性与审计
- Context Provide 审计 :每次
provide记录来源组件、时间戳、schemaVersion 与 payload 摘要(避免记录敏感数据)。 - Context 变更事件:当上下文被替换或更新时,记录变更事件并触发开发态告警或生产态日志。
- 可视化工具:开发态提供上下文树可视化,展示当前组件树中注入的上下文与来源,便于调试与权限回溯。
4 业务模型治理与 Model Registry
4.1 模型优先的必要性
模型是低代码、aPaaS 与 AI 能力的基础。模型驱动能把页面、操作、权限与 AI 生成能力统一到一套可治理的元数据体系中,从而实现高复用、低重复、可审计与可演进。
4.2 Model Registry 功能清单
- 注册/查询:模型注册、版本查询、历史快照查询。
- 版本管理 :每个模型必须带
schemaVersion(语义化或时间戳)。 - 迁移脚本:前端兼容迁移函数与后端数据迁移脚本。
- 灰度发布:按租户/模块/用户组灰度切换模型版本。
- 回滚:一键回滚并执行回滚脚本。
- 兼容性检测:CI 自动检测能力配置与页面对新模型的兼容性。
- 审计:记录模型变更人、时间、变更内容与影响范围。
4.3 模型元信息结构建议
示例 JSON(简化):
json
{
"modelCode": "order",
"schemaVersion": "2026.01.23",
"fields": [
{
"fieldCode": "orderId",
"type": "string",
"label": "订单编号",
"required": true,
"permissions": { "read": ["admin","sales"], "write": ["admin"] }
},
{
"fieldCode": "amount",
"type": "number",
"label": "订单金额",
"format": "currency",
"rules": [{ "type": "min", "value": 0 }]
}
],
"meta": { "description": "订单主表模型" }
}
4.4 模型变更与迁移流程(建议)
- 提交变更 PR:开发者提交模型变更 PR,包含 schema diff、迁移脚本与兼容性说明。
- CI 校验:自动执行契约测试、兼容性检测、静态校验(能力配置、操作引用)。
- 审批与灰度:模型治理委员会审批,支持灰度发布到部分租户或模块。
- 全量发布:灰度验证通过后全量发布并记录审计。
- 回滚:若问题出现,执行回滚脚本并记录原因与影响。
4.5 兼容性策略(工程建议)
- 新增字段默认可选:避免破坏现有页面。
- 删除字段需迁移:提供迁移脚本或兼容适配层。
- 字段类型变更需谨慎:强制走迁移流程并提供回退方案。
- 模型依赖映射:记录哪些页面/能力/操作依赖该模型,变更前进行影响分析。
5 操作 DSL、事务语义与审计链路
5.1 设计目标
将业务操作(CRUD、批量、复杂事务)以结构化 DSL 定义,使操作成为可配置、可审计、可组合的能力单元,便于低代码平台调用与治理。
5.2 DSL 语法要点
DSL 应支持以下字段(YAML/JSON):
operationCode:唯一操作码。description:操作描述。input:输入参数定义(支持引用模型)。permissions:操作级权限声明(角色/策略)。preChecks:前置校验(字段校验、规则校验、外部校验)。transaction:是否需要事务语义。retryPolicy:重试策略(次数、退避)。postActions:后置动作(通知、webhook、补偿)。meta:扩展元信息。
示例(YAML):
yaml
operationCode: OP_ORDER_CREATE
description: 创建订单
input:
- name: orderData
type: Model:order
permissions:
- role: sales
allow: create
preChecks:
- type: validateFields
params: { required: ['amount','customerId'] }
transaction: true
postActions:
- type: notify
params: { channel: 'order-events' }
5.3 执行语义与保障
- 幂等性 :每次写操作需携带
transactionId或clientRequestId,后端与前端共同保证幂等。 - 事务与补偿 :支持本地事务与跨服务补偿(Saga),操作 DSL 标注
transaction: true时触发事务管理。 - 权限校验:前端做 UI 级预校验,后端做最终鉴权;操作 DSL 中声明的权限需与后端权限中心对齐。
- 审计链路 :记录
operationCode、transactionId、调用者、参数摘要、执行结果、耗时与错误码。 - 错误处理:定义失败重试策略、补偿操作与回滚脚本。
5.4 操作与模型的耦合
- 操作 DSL 引用模型字段与权限规则,自动生成表单、校验与交互逻辑。
- 操作可绑定模型版本,保证在模型演进时操作行为的可回溯性。
- 操作定义应包含最小必要输入描述,避免前端传输冗余数据。
5.5 审计事件与日志格式建议
- 操作审计事件 :
{ id, operationCode, transactionId, callerId, paramsSummary, result, errorCode, durationMs, timestamp } - 上下文提供事件 :
{ id, contextKey, providedBy, providedAt, schemaVersion, payloadSummary } - 权限变更事件 :
{ id, target, changeType, changedBy, timestamp, details }
审计数据应写入集中日志系统(ELK/Datadog/其他),并支持按 transactionId 或 modelCode 回溯链路。
6 交互能力化与能力组件体系
6.1 能力化交互的价值
- 复用:把通用交互抽象为能力组件,减少重复实现。
- 低代码支持:能力配置可视化生成页面。
- 治理:能力作为单元便于版本管理、审计与灰度发布。
6.2 能力组件设计原则
- 参数化 :能力通过标准化 JSON 配置驱动,配置引用
modelMeta与fieldRules。 - 无业务状态:能力尽量无内部业务状态,状态由上层编排或模型驱动。
- 可组合:支持嵌套能力、条件渲染与事件联动。
- 可注册:能力实现通过能力注册器注册到运行时,支持按需加载与版本管理。
- 可视化配置:低代码平台通过拖拽式面板生成能力配置 JSON。
6.3 常见能力类型与配置示例
Table 能力(示例 JSON):
json
{
"ability": "table",
"params": {
"model": "order",
"columns": ["orderId","amount","status"],
"pagination": { "pageSize": 20 },
"rowActions": ["OP_ORDER_EDIT","OP_ORDER_DELETE"]
}
}
Form 能力(示例 JSON):
json
{
"ability": "form",
"params": {
"model": "order",
"fields": ["customerId","amount","items"],
"layout": "vertical",
"submitAction": "OP_ORDER_CREATE"
}
}
6.4 能力组合器职责
- 解析页面元数据并构建能力树。
- 注入上下文(PageContext、ModelContext、OperationContext)。
- 管理能力间事件总线与权限过滤。
- 支持能力热替换、按需加载与版本回退。
6.5 能力运行时性能优化
- 按需加载:能力实现按需加载,避免一次性打包所有能力。
- 能力缓存:对能力实现与能力配置进行缓存,减少重复解析。
- 预热策略:在路由预加载阶段预热常用能力。
- 懒渲染:对不可见或折叠区域的能力延迟渲染。
7 基础组件库与主题体系化策略
7.1 组件设计原则
- 无业务语义:基础组件不包含业务逻辑。
- 受控优先:组件尽量实现受控属性,状态由上层能力管理。
- 小而可组合:优先原子组件,组合成复杂组件。
- 可访问性:遵循 WCAG 基本要求。
- 视觉一致性:使用 design tokens 管理主题变量。
7.2 主题与样式体系
- Design Tokens:统一颜色、间距、字体、断点等变量。
- CSS 变量:使用 CSS 变量实现运行时主题切换(暗黑/浅色、品牌色替换)。
- 响应式断点:定义标准断点并在组件库中统一使用。
- 样式隔离:组件样式采用模块化或 CSS-in-JS,避免全局污染。
7.3 组件发布与版本管理
- 语义化版本:遵循 SemVer,重大变更需提供迁移指南。
- 视觉回归测试:每次发布触发视觉回归(Percy/Chromatic)。
- 兼容性测试:确保新版本与旧能力配置兼容或提供迁移脚本。
- 文档与示例:组件库提供完整文档、示例与最佳实践。
8 AI 工程化接入与智能化能力落地
8.1 AI 能力的切入点
- 模型生成 :基于
modelMeta自动生成表单、表格列、默认校验与视图布局。 - 校验与规则建议:AI 根据历史数据与规则建议字段校验、联动逻辑与默认值。
- 权限异常检测:AI 分析权限配置与访问日志,提示潜在越权风险。
- 测试用例生成:根据模型与操作定义自动生成契约测试用例。
- 自然语言到配置:支持将自然语言描述转为能力配置(需严格审计)。
8.2 工程化接入建议
- AI 服务层 :独立微服务接收
modelMeta与contextSnapshot,返回建议或生成结果。 - 接口契约 :AI 请求需包含
modelCode、schemaVersion、contextSnapshot,返回带置信度与解释的建议。 - 复核流程:AI 生成的配置必须进入人工复核流程,尤其是权限、财务等高风险场景。
- 可解释性:AI 输出需附带理由或置信度,便于审计。
- 隐私控制:敏感数据脱敏或在受控环境中处理,避免外部服务泄露风险。
8.3 AI 输出治理
- 审计记录:记录 AI 请求与返回摘要、置信度、复核人。
- 回滚与修正:AI 生成配置若导致问题,支持回滚并记录修正流程。
- 模型监控:监控 AI 输出质量(误报率、复核通过率),定期评估与调优。
9 测试策略、可观测性与审计实践
9.1 测试策略
- 契约测试:上下文接口(PageContext、ModelContext、OperationContext)、模型 API、操作 DSL 的契约测试。
- 单元测试 :组件与能力单元测试,mock
provide/inject。 - 集成测试:覆盖 L2→L4 的编排与操作流。
- 端到端测试:关键业务流程 e2e 覆盖(Playwright/Cypress)。
- 视觉回归:组件库与关键页面的视觉回归测试。
- AI 输出校验:对 AI 生成配置进行规则化校验与抽样人工复核。
9.2 上下文 Mock 与测试工具
- 提供
setProvideMock()工具用于测试环境注入上下文。 - 在契约测试中使用模型快照与能力配置样例,避免依赖真实后端。
- 使用 Vitest/Jest + @vue/test-utils 进行单元与集成测试。
9.3 可观测性与审计实践
- 上下文审计 :记录
provide来源、schemaVersion、时间戳。 - 操作审计 :记录
operationCode、transactionId、调用者、结果与错误码。 - 权限审计:记录权限变更、授权者、时间。
- 性能监控:能力加载时间、操作耗时、AI 请求延迟。
- 告警策略:模型回滚、权限异常、操作失败率上升触发告警。
9.4 日志与链路追踪
- 最小必要日志 :避免记录敏感数据,记录摘要与引用 ID(如
transactionId)。 - 链路追踪 :通过
transactionId或 traceId 关联前端操作、后端执行与 AI 请求。 - 日志存储:集中化日志系统(ELK/Datadog/其他),支持查询与回溯。
10 CI/CD、灰度发布与治理流水线
10.1 CI/CD 要点
- Model Registry 自动化:CI 在合并模型变更时自动注册新版本并触发兼容性测试。
- 能力配置校验器:静态校验能力配置合法性与权限引用。
- 视觉回归:组件库与关键页面的视觉回归测试。
- 契约测试:在 CI 中执行契约测试,阻止不兼容变更合并。
- 灰度发布流水线:支持按租户/模块灰度切换模型版本并回滚。
10.2 灰度与回滚策略
- 灰度规则:按租户、用户组或模块进行灰度,记录灰度指标(错误率、性能、用户反馈)。
- 回滚机制:一键回滚模型版本并执行回滚脚本,回滚过程记录审计。
- 监控门槛:定义灰度指标阈值(错误率、延迟、AI 复核失败率),超过阈值自动回滚或告警。
10.3 治理组织建议
- 模型治理委员会:审批模型变更、定义兼容策略与迁移规则。
- 安全与权限小组:审查权限策略、操作码与审计策略。
- AI 风控小组:评估 AI 输出风险、制定复核规则与隐私策略。
- 平台工程团队:维护能力层、组件库、Model Registry 与 CI/CD 流水线。
11 迁移策略、实施路线与组织治理
11.1 分阶段实施路线(建议)
- 阶段 0 评估与准备(1--2 月):梳理现有系统、确定首批模型与能力清单、设计上下文契约草案。
- 阶段 1 基础能力搭建(2--4 月):实现 L1、L2 基础框架、路由守卫、AppContext、页面注册与上下文接口。
- 阶段 2 模型驱动与能力化(3--6 月):搭建 Model Registry、schemaVersion 管理、实现 L5 能力组件(table、form、modal)。
- 阶段 3 操作治理与审计(4--8 月):实现操作 DSL、事务/补偿、审计链路与契约测试。
- 阶段 4 AI 能力接入(6--12 月):接入 AI 服务,构建生成与校验流水线,建立复核机制。
- 阶段 5 全面推广与优化(持续):迁移旧页面到能力化体系,优化性能、体验与治理。
11.2 迁移策略要点
- 分层迁移:优先迁移 L6→L5 的组件与能力,再逐步上移到 L4、L3、L2。
- 双轨并行:新体系与旧页面并行运行,逐步替换。
- 兼容适配层:短期提供适配器支持旧页面读取新模型元信息。
- 灰度发布:模型与能力支持灰度发布与回滚。
- 治理组织:成立模型治理委员会、安全小组与平台工程团队协同推进。
11.3 组织与流程建议
- 明确职责:平台工程负责能力层与组件库,业务团队负责模型定义与能力配置,治理委员会负责审批与策略。
- 培训与文档:提供模型设计指南、能力配置示例、操作 DSL 文档与审计流程培训。
- 度量指标:定义迁移成功指标(覆盖率、错误率、开发效率提升、复用率),定期评估。
12 风险点、常见问题与缓解措施
12.1 主要风险与缓解
| 风险 | 缓解措施 |
|---|---|
| provide/inject 被滥用为全局状态 | 强制 ESLint 规则、代码审查、上下文审计、开发态可视化 |
| 模型变更导致页面故障 | schemaVersion、迁移脚本、灰度发布、兼容性测试 |
| 隐式依赖导致调试困难 | 上下文可视化工具、审计日志、契约测试 |
| AI 生成配置误用 | 人工复核、可解释性要求、审计记录 |
| 性能问题(能力加载慢) | 能力按需加载、缓存、预热、性能监控 |
| 权限错配或越权 | 权限审计、权限回溯工具、严格的权限测试 |
12.2 常见问题与建议
-
如何避免上下文滥用?
- 通过静态检查(ESLint)、代码审查与运行时审计阻止滥用;在团队规范中明确禁止在上下文中传递响应式数据或业务实例。
-
模型变更如何保证兼容?
- 强制迁移脚本、灰度发布、CI 兼容性检测与回滚机制。
-
AI 生成配置如何保证安全?
- AI 输出必须带置信度与解释,进入人工复核流水线;敏感数据脱敏或在受控环境中处理。
-
如何衡量迁移效果?
- 指标包括页面迁移覆盖率、重复实现减少率、开发效率提升、错误率下降与审计合规率。
13 附录:接口草案、示例配置、ESLint 规则伪代码、契约测试模板
13.1 上下文接口草案(TypeScript 精简版)
ts
export const PAGE_CONTEXT = Symbol('PageContext');
export const MODEL_CONTEXT = Symbol('ModelContext');
export const OPERATION_CONTEXT = Symbol('OperationContext');
export interface PageContext {
moduleCode: string;
pageCode?: string;
pageMode: 'config' | 'runtime';
pagePermissions: string[];
providedAt: string;
providedBy?: string;
}
export interface FieldPermission {
read?: string[];
write?: string[];
visible?: boolean;
}
export interface ModelContext {
modelCode: string;
schemaVersion: string;
modelMeta: Record<string, any>;
fieldRules: Record<string, FieldPermission>;
providedAt: string;
providedBy?: string;
}
export interface OperationContext {
operationCode: string;
transactionId?: string;
rowId?: string;
scope?: 'row' | 'batch' | 'global';
providedAt: string;
providedBy?: string;
}
13.2 操作 DSL 示例(YAML)
yaml
operationCode: OP_ORDER_CREATE
description: 创建订单
input:
- name: orderData
type: Model:order
permissions:
- role: sales
allow: create
preChecks:
- type: validateFields
params: { required: ['amount','customerId'] }
transaction: true
retryPolicy:
retries: 3
backoff: exponential
postActions:
- type: notify
params: { channel: 'order-events' }
13.3 能力配置示例(JSON)
json
{
"ability": "table",
"params": {
"model": "order",
"columns": ["orderId","amount","status"],
"pagination": { "pageSize": 20 },
"rowActions": ["OP_ORDER_EDIT","OP_ORDER_DELETE"]
}
}
13.4 ESLint 规则伪代码(禁止 provide 传递 reactive/ref)
js
// eslint rule: no-provide-reactive (伪代码)
module.exports = {
meta: { type: 'problem' },
create(context) {
return {
CallExpression(node) {
if (isProvideCall(node)) {
const arg = node.arguments[1];
if (isReactiveOrRef(arg)) {
context.report({ node, message: '禁止在 provide 中传递 reactive/ref 对象' });
}
}
}
}
}
}
13.5 契约测试模板(Vitest + Vue Test Utils)
ts
import { mount } from '@vue/test-utils';
import { describe, it, expect } from 'vitest';
import MyComponent from '@/components/MyComponent.vue';
import { setProvideMock } from '@/test-utils/context-mock';
import { MODEL_CONTEXT } from '@/context/keys';
describe('MyComponent contract tests', () => {
it('renders fields based on model context', () => {
setProvideMock(MODEL_CONTEXT, {
modelCode: 'order',
schemaVersion: 'test',
modelMeta: { fields: [{ fieldCode: 'orderId', label: '订单编号' }] },
fieldRules: {}
});
const wrapper = mount(MyComponent);
expect(wrapper.text()).toContain('订单编号');
});
});
结语
本技术架构方案以工程化、契约化与模型驱动为核心,提供了面向平台型与配置型系统的前端技术骨架。通过 L1--L6 能力分层、provide/inject 上下文契约、Model Registry 与版本化、操作 DSL 与审计、能力化交互与组件体系、AI 工程化接入、以及测试/CI/CD/迁移治理等一整套工程实践,能够把前端从页面实现升级为可配置、可组合、可治理、可演进的应用能力引擎。落地后,这套体系将显著提升开发效率、降低重复实现、增强治理能力,并为未来的智能化能力奠定坚实基础。
如果你需要,我可以把本文中的关键模块逐项生成为工程模板(例如:完整 TypeScript 接口库、ESLint 插件实现、Model Registry 原型、操作 DSL 解析器、能力配置可视化 schema、契约测试套件),并附带 README、CI 配置与示例项目,便于团队直接拉取并在工程中试用。你想先要哪个模块?