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