低代码平台探讨-MetaStore元数据缓存 | 京东云技术团队
💡
原文中文,约5100字,阅读约需13分钟。
📝
内容提要
本文介绍了元数据模块深度复制的两种实现方式:序列化和递归处理,作者选择了递归处理并解决了其中的问题。同时,提到使用不变对象也可解决数据修改问题,但需注意内部变量保护。
🎯
关键要点
- 背景及需求:需要一个元数据模块,提供加载元数据和查询服务的功能。
- 特殊说明:最初支持本地和远程源,后期去掉远程逻辑以防网络隔离问题。
- 第一版迭代处理的元数据包括模型、页面DSL及菜单,后期加入触发器和用户自定义API。
- 功能性需求包括缓存模型元数据、页面DSL和菜单列表,非功能性需求包括高性能、数据准确性和易于扩展。
- 初版设计选择使用内存缓存,利用HashMap存储元数据,确保高性能。
- 详细逻辑中,getByKey方法从缓存中获取数据,load方法负责加载数据并解析成对象。
- 抽象出公共逻辑,利用模板模式实现模型和页面DSL的元数据缓存逻辑复用。
- 菜单元数据缓存逻辑与模型和页面DSL不同,需单独处理,避免代码重复。
- 解决代码重复问题的方案包括使用继承和组合,最终选择组合方案更合理。
- 初始化加载通过实现ApplicationListener接口,在应用启动时触发数据加载。
- 第二版设计中发现菜单权限逻辑存在问题,导致菜单数据被错误修改。
- 元数据存储类似原型模型,需实现深度复制以避免数据混乱。
- 深度复制的实现方式有序列化和递归处理,选择递归处理以满足性能需求。
- 使用不变对象可解决数据修改问题,但需注意内部变量的保护。
➡️