28 Star 31 Fork 19

UBML / business-entity-framework

 / 详情

希望业务实体框架持久化映射关系支持自定义

待办的
拥有者
创建于  
2023-03-17 18:16

Issue 主题
希望业务实体框架持久化映射支持自定义

详细描述
我要反馈
[x] 缺陷
[ ] 新特性

目前业务实体框架提供了基于关系型数据库的持久化处理,支持CRUD等操作,目前支持业务实体字段与数据库列一对一、根据业务字段类型多对一、根据关联结构一对多等映射关系。

随着UBML用户越来越多,发现了越来越多的复杂的映射场景,框架目前的结构设计很难将全部场景都包起来:本身投入的资源就不够,并且会使得框架越来越臃肿。

目前已经识别的场景有如下:

1、对于组织字典,在很多业务单据上都会引用,一般都是采取的业务单据上存组织内码(ID),通过关联设置带出其名称、编码等其他信息的方式。在很多企业中,对于业务单据上,组织名称的显示,会有统一的要求:有的企业只显示组织名称(xx部门)、有的企业显示组织的简称(xx)、有的企业显示组织的全称(xx集团/xx公司/xx部门)等。这就要求组织业务实体上名称字段对应的数据库列是一个动态的(可能是基于一套全局的配置);

2、复杂类型字段存储:对于一些复杂类型的字段(有多个属性),要求将这些属性保存到不同的数据库列中,如:属性1保存到列x中,属性2保存到列y中,属性3保存到列z中,在CRUD、过滤、排序等场景中,都需要做字段值的拆分、组合、过滤等映射。

解决此问题的思路,一般情况下,使用微内核机制,框架只负责整体逻辑,将实体字段持久化映射逻辑视为一种处理插件,框架内置的这几种场景都是特定内置的插件,如果框架内置的场景不支持,可自己开发相应的插件。要支持插件化扩展的功能点包括但不限于查询(查询列、查询关联表、数据库值转换为内存对象字段值的映射、过滤条件的映射、排序条件映射)、检索(检索列、检索关联表、数据库值转换为内存对象中字段值的映射)、新增保存(insert列、内存对象到数据库值的映射)、编辑修改(update列、内存对象到数据库值的映射)等,都需要支持插件化扩展。

评论 (5)

宫保金 创建了任务
宫保金 添加了
 
feature
标签
宫保金 修改了描述
宫保金 负责人张进(浪潮国际) 修改为未设置
宫保金 添加协作者王茂健
宫保金 负责人设置为张进(浪潮国际)
展开全部操作日志

@张进(浪潮国际) @王茂健 hi,John、Michael:
此Issue,需要在设计时,将持久化层与数据库交互相关的内容提取出来,持久化框架不能再有sql拼接、数据转换等具体的逻辑,需要将这些处理逻辑使用扩展机制注入进来。
建议在进行设计之前,提前了解微内核架构,梳理清楚几个点:
1、哪些逻辑属于框架;
2、哪些逻辑属于扩展内容;
3、扩展机制该以何种方式实现,基于配置?异或bean?
4、框架需要提供给扩展逻辑哪些内容(这一点可以以关联、业务字段、组织等场景进行梳理),要保持接口的扩展性,后续如果需要框架提供更多内容时,不用调整接口,比如整一个context?
5、解析型与生成型要复用此逻辑,生成型需要考虑之前生成的代码如何兼容;

宫保金 修改了描述

从用户反馈来看,查询、检索两个取数的场景对于定制化的需求比较旺盛,由于目前持久化层逻辑封闭,不能提供细粒度的扩展机制,当内置处理逻辑不满足用户需求时,只能全部重写查询逻辑,代价较大且实现较为复杂、繁琐。针对更新保存的场景,可以通过联动计算,对数据进行分解指定,基本满足用户使用。本次重构着重支持取数的扩展。
有以下几点工作需要处理:
1.持久化层将取数逻辑进行抽取封装,以内置插件的形式集成到框架中,框架根据实体插件配置信息决定使用内置插件还是扩展插件,并将插件处理结果进行组装。
2.取数逻辑可以分解成查询字段拼接、表名拼接、过滤条件拼接、排序条件拼接、数据转换五个部分,我们需要对五个部分都支持插件扩展。框架负责定义各个部分的插件接口,约定返回数据格式,规则,确保自定义插件的返回结构符合框架整体处理逻辑。
3.考虑增加一个扩展配置表,允许用户通过界面,配置对查询哪个部分进行插件替换。
4.我们除了对持久化层支持插件进行重构外,也需要对内置查询的功能进行增强,比如字段取数增加对表达式设置、变量上下文的支持,过滤条件支持Exists等。尽量通过内置功能来满足用户需求,减少二次开发。

同意,还请尽快出一下结构设计,邀请大家一起看看。

经讨论评审,确定在元数据字段上增加扩展属性标记表名扩展、字段扩展和数据转换扩展实现。
元数据存储结构如下:
输入图片说明
1.表名拼接的扩展实现中,需要在扩展实现中指定关联字段信息,并且存储到框架指定的结构中,以便后续拼接字段的时候能够识别到,整体结构如下:
输入图片说明
2.字段拼接的扩展实现中,框架会传递变量、上下文等信息,供扩展获取指定的参数,以便完成字段拼接,运行结构如下:
输入图片说明
3.数据转换的扩展实现中,框架会传递当前扩展字段以及关联字段信息和映射关系,并提供公共的数据转换接口,以便完成复杂对象的处理,框架也要进行修改,允许BE字段类型和实际类型不一致,比如文本类型对应值是关联对象,整体结构如下:输入图片说明

Hi Michael:
思路上感觉很清晰,这块的开发能否请你来做一下,可以分多步进行,先做查询相关扩展,然后再找机会做其他几块操作扩展处理。
如果可以的话,还请领取此Issue,然后排一下完成日期。

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
Java
1
https://gitee.com/ubml/business-entity-framework.git
git@gitee.com:ubml/business-entity-framework.git
ubml
business-entity-framework
business-entity-framework

搜索帮助