Skip to Content

配置持久化

让您的模型和视图配置永久保存,支持版本管理和环境同步。注册模型或视图时,Entity Engine 会自动将配置存储到数据库的 __config__ 表中。

自动保存配置

注册模型时配置会自动保存到数据库。无需手动操作,引擎会处理所有持久化细节:

import { getEntityEngine } from './lib/entity-engine'; const engine = await getEntityEngine(); // 注册模型 - 配置自动保存 await engine.metaRegistry.updateOrRegister({ name: 'User', title: '用户管理', fields: [ { name: 'id', title: 'ID', type: 'string', isRequired: true }, { name: 'name', title: '姓名', type: 'string', isRequired: true }, { name: 'email', title: '邮箱', type: 'string', isRequired: true } ] }); // 配置已保存到数据库 __config__ 表 // 键名: "model:User" // 包含完整的模型定义和版本信息

注册视图时同样自动保存:

// 注册视图 - 配置自动保存 await engine.metaRegistry.updateOrRegisterView({ modelName: 'User', name: 'UserFormView', title: '用户表单', type: 'FormView', config: { fields: ['name', 'email'], submitAction: 'create' } }); // 配置已保存到数据库 // 键名: "view:User:UserFormView"

配置键命名规则

引擎使用标准化的键名来组织不同类型的配置:

// 配置键的命名约定 model:User // 用户模型配置 view:User:FormView // 用户表单视图配置 fieldtype:RichText // 富文本字段类型配置 module:BlogModule // 博客模块配置

这种约定让您可以快速定位特定的配置项。

查看已保存的配置

配置保存后,您可以通过数据源直接查询:

// 查看所有模型配置 const modelConfigs = await engine.datasourceFactory .create('__config__') .listObjects({ modelName: '__config__', filter: { name: { startsWith: 'model:' } } }); console.log('已注册的模型:', modelConfigs.items.length); // 查看特定模型的配置 const userConfig = await engine.datasourceFactory .create('__config__') .getObject({ modelName: '__config__', filter: { name: 'model:User' } }); if (userConfig) { const modelDef = JSON.parse(userConfig.content); console.log('用户模型字段:', modelDef.fields.length); }

版本管理

每次更新模型或视图时,引擎会自动创建新版本:

// 首次注册 - 自动创建版本 1 await engine.metaRegistry.updateOrRegister({ name: 'Product', title: '产品', fields: [ { name: 'name', title: '产品名', type: 'string' } ] }); // 更新模型 - 自动创建版本 2 await engine.metaRegistry.updateOrRegister({ name: 'Product', title: '产品管理', // 修改标题 fields: [ { name: 'name', title: '产品名', type: 'string' }, { name: 'price', title: '价格', type: 'number' } // 新增字段 ] }); // 版本信息自动保存在 __config__ 表的 version 字段

查看版本历史:

// 查询特定配置的所有版本 const versions = await engine.datasourceFactory .create('__config__') .listObjects({ modelName: '__config__', filter: { name: 'model:Product' }, orderBy: [{ field: 'version', direction: 'desc' }] }); console.log('Product 模型有', versions.items.length, '个版本'); // 获取最新版本 const latestVersion = versions.items[0]; console.log('最新版本:', latestVersion.version);

配置同步

在不同环境间同步配置(如开发、测试、生产):

// 导出生产环境的配置 const prodConfigs = await engine.datasourceFactory .create('__config__') .listObjects({ modelName: '__config__', filter: { name: { startsWith: 'model:' } } }); // 保存到 JSON 文件 const configData = prodConfigs.items.map(item => ({ name: item.name, version: item.version, content: JSON.parse(item.content) })); // 在测试环境导入配置 for (const config of configData) { const modelDef = config.content; await engine.metaRegistry.updateOrRegister(modelDef); }

实际应用场景

多环境部署

在 CI/CD 流程中自动同步配置:

// deploy-config.js - 部署脚本 import { getEntityEngine } from './lib/entity-engine'; import configData from './config/production-models.json'; const engine = await getEntityEngine(); // 部署时注册所有模型 for (const modelConfig of configData.models) { await engine.metaRegistry.updateOrRegister(modelConfig); console.log(`✅ 已部署模型: ${modelConfig.name}`); } // 注册视图 for (const viewConfig of configData.views) { await engine.metaRegistry.updateOrRegisterView(viewConfig); console.log(`✅ 已部署视图: ${viewConfig.name}`); }

配置备份

定期备份配置到外部存储:

// backup-configs.js - 定期备份任务 const engine = await getEntityEngine(); // 获取所有配置 const allConfigs = await engine.datasourceFactory .create('__config__') .listObjects({ modelName: '__config__' }); // 备份到云存储或文件系统 const backup = { timestamp: new Date().toISOString(), configs: allConfigs.items, totalCount: allConfigs.items.length }; // 保存备份 await saveToCloudStorage(`backup-${Date.now()}.json`, backup);

最佳实践

模型定义标准化

建立统一的模型定义规范:

// 推荐的模型定义结构 const standardModel = { name: 'Product', // 使用 PascalCase title: '产品管理', // 清晰的中文标题 description: '产品信息管理系统', // 详细描述 fields: [ { name: 'id', // 总是包含 id 字段 title: 'ID', type: 'string', isRequired: true }, { name: 'createdAt', // 标准审计字段 title: '创建时间', type: 'datetime', isRequired: true }, { name: 'updatedAt', // 标准审计字段 title: '更新时间', type: 'datetime' } ] };

配置验证

注册前验证模型定义的完整性:

// 验证模型定义 const validateModel = (model) => { if (!model.name || !model.title) { throw new Error('模型必须有 name 和 title'); } // 确保有 id 字段 const hasId = model.fields.some(f => f.name === 'id'); if (!hasId) { throw new Error('模型必须包含id 字段'); } }; // 安全注册 try { validateModel(newModel); await engine.metaRegistry.updateOrRegister(newModel); } catch (error) { console.error('模型注册失败:', error.message); }

开发环境配置

在开发过程中监控配置变化:

// 开发环境下显示配置变化 if (process.env.NODE_ENV === 'development') { engine.eventRegistry.on('model:registered', (event) => { console.log(`📝 模型已注册: ${event.data.name}`); console.log(` 字段数量: ${event.data.fields.length}`); }); engine.eventRegistry.on('view:registered', (event) => { console.log(`🎨 视图已注册: ${event.data.name}`); console.log(` 类型: ${event.data.type}`); }); }
Last updated on