在SqlSugar的开发框架中增加对低代码EAV模型(实体-属性-值)的WebAPI实现支持

我在前面随笔中介绍了在SqlSugar的开发框架中实现EAV模型(实体-属性-值)的处理,这个EAV模型实现的目的是支持弹性化的数据库设计,可以自由扩展数据库表字段和数据的查询和存储,实现的思路是在常规关系数据库中存储实体-属性-值的信息,而在非关系型数据库MongoDB数据库中存储自由字段的数据表集合,之前我们实现了在Winform界面端中对本地数据库和MongoDB数据库的处理操作,本篇随笔基于SqlSugar的开发框架的Web API实现过程,介绍对低代码EAV模型(实体-属性-值)的WebAPI实现支持。

1、SqlSugar开发框架的设计思路

SqlSugar的开发框架本身主要是基于常规关系型数据库设计的框架,支持多种数据库类型的接入,如SqlServer、MySQL、Oracle、PostgreSQL、SQLite等数据库,非关系型数据库的MongoDB数据库也可以作为扩展整合到开发框架里面。

 SqlSugar的开发框架本身设计是支持多终端的接入的,支持Winform、WPF、Vue3+ElementPlus、H5的APP应用等多终端的接入的,而Winform、WPF由于运行在客户端的,因此可以自由切换基于本地数据库还是Web API的服务接入,界面呈现效果一致。

 对于数据的访问,我们设计开关变量模式来自由切换本地数据库模式或Web API的访问方式。如下所示。

  

2、EAV模型的设计思路

 EAV模型(实体-属性-值)的处理,主要是用来解决动态定义业务表和数据存储和查询的解决方案,我们可以通过动态定义表和字段信息的方式,实现低代码甚至零代码的设计方案。

对于业务表,我们在系统中利用界面动态定义信息即可。如下面是产品信息表的定义界面,定义表和字段的相关信息即可。

然后通过配置菜单入口,给出了一个常规的数据录入管理界面,如下所示。

上面的字段录入,支持文本、数值、字典选择、单选框、复选框、日期、系统表选择(包括用户、角色、机构、定义表)、附件列表等内容的录入,基本覆盖了常规的需求,特殊需求进行一定的定制化处理即可。

而对于有些业务的主从表处理,如订单和订单明细,也可以通过配置的方式实现界面的自动处理。

动态化的数据,查询是其中一个难题,EAV模型(实体-属性-值)他的数据是根据不同的类型进行定义的,不会把所有的内容放在字符型的里面存储,因此保留了字段的原生类型,写入到MongoDB的非关系型数据库中,可以很好的支持各种复杂的查询处理。

 由于我们的表字段是动态化构建的,因此查询字段就也就需要动态化了,我们把查询字段通过列表选择的方式,条件根据不同的数据类型,创建不同的输入控件来实现查询处理。

 或者

通过下拉列表的方式选择不同的字段进行查询,如果是数值型或者日期,我们可以根据不同类型来创建输入控件组,来实现区间数值或者日期的输入。

 有时候,为了方便,还提供了一个自定义条件查询的处理功能,可以自由组合多个条件进行数据的查询过滤。

我们参考了magento的eav模型设计图,对不同数据类型的内容进行了独立的存储。

 由于实体类型(表定义)、实体字段属性、实体记录、字段复制映射关系、属性操作日志、删除日志等表联合构成了一个完整的裸条,如下所示。

如果我们MongoDB的数据记录移除了,还可以根据关系表的记录和属性值信息,进行MongoDB数据的同步记录处理,这样就可以还原MongoDB的数据记录了,如下所示。 

 

3、基于WebAPI的支持实现

在SqlSugar开发框架中,我们是以接口来串起来整个应用的架构的,并且我们通过泛型基类的封装和集成,极大的减少常规代码的编写。

我们只需要在基类函数里面定义好相关的标准处理:如增、删、改、查、分页、导入、导出、排序等通用接口,以及针对不同业务模块,提供一个接口的扩展和实现即可,如下设计图所示。

一个良好的产品,可能往往需要支持多种数据库的接入,根据实际业务的需要进行调整,有时候可能需要2到3种数据库的支持。

SQLSugar的表和字段信息,都是通过特性描述的方式定义的,它们在不同的数据库是通用的,而我们要做的就是在启动的时候,加载不同的数据库连接字符串,进行初始化即可

而对应Web API的代理调用类,那么为了极大的重用常规的接口处理,我们需要类似的继承关系。

对于BS的前端和移动端,我们根据框架后端的接口进行前端JS端的类的封装处理,引入了ES6类的概念实现业务基类接口的统一封装,简化代码。

这样不管对于终端的调用(Vue3的TS客户端、WInform端、WPF端、Python前端后端)都是以一定的基类抽象的方式,尽可能的封装相同逻辑接口的实现,通过泛型类的引入,可以非常弹性化接口的实现处理。

我们根据接口的定义,分别实现WebAPI的控制器实现部分,以及ApiCaller的客户端调用的封装处理部分,如下所示。

Web API的部分如下所示。

 Web API部分的路由是Restful的格式命名,然后根据实际的接口定义参数入口即可,如果是复杂实体对象的传递,一般用POST方式。

Web API的ApiCaller调用封装类,主要就是调用基类实现数据的调用和解析处理即可。如对于字段属性的ApiCaller的接口调用封装,如下所示。

主要就是根据Web API的路由名称和参数,以及请求方式的处理即可。

由于Winform或者WPF的调用是基于接口的处理方式,它实际的调用是根据开关变量的参数配置进行选择的。

复制代码
            //根据条件获取分页记录或者全部记录
            var result = await BLLFactory<IAttributeService>.Instance.MongoGetList(pageDto);
            var dataTable = result.Items;
            if (pageDto.IsPaging)
            {
                this.pager1.PagerInfo.RecordCount = result.TotalCount;//记录总行数
            }
复制代码

因此在Winform端或者WPF端,我们开发代码的时候,不用管它来自哪里,都是统一的模型调用处理。

以上就是我们SqlSugar开发框架的多接入方式、多端接入的实现思路,以及EAV实体属性值模式实现数据的弹性化定义以及查询、存储的处理。

原创作者: wuhuacong 转载于: https://www.cnblogs.com/wuhuacong/p/18842471
【unet改进实战】基于unet+SCSE注意力机制改进实现的【自动驾驶】图像语义分割+项目说明书+数据集+完整代码 项目概述 本项目基于PyTorch框架构建了一个通用图像分割系统,全面支持二分类及多类别分割任务。 系统功能 该系统提供从数据预处理到模型训练、验证评估的全流程解决方案,具备高度可配置性和实用性: 数据处理:支持自定义图像和掩码文件格式(如.jpg、.png等),自动处理不连续标签,集成多种数据增强技术提升模型泛化能力 模型架构:基于UNet实现,可通过参数灵活调整输入尺寸、卷积通道数等,兼容不同类别数量的分割任务(通过--num_classes参数指定) 训练功能:支持GPU加速,提供学习率、批次大小等超参数配置选项,实时记录损失曲线和评估指标(如IoU、Dice系数),自动保存最优模型权重 使用流程 按规范组织数据集(图像与掩码文件需名称对应,分别存放在images/masks子目录) 通过命令行参数启动训练,可指定: 数据路径(--data_dir) 学习率(--learning_rate) 标签映射规则(--label_mapping)等 系统输出包含: 模型权重文件(.pth) 训练曲线可视化图表 指标日志文件 注意事项 掩码图像应为单通道灰度图,标签为整数 多分类任务推荐使用one-hot编码掩码 项目依赖主流科学计算库(PyTorch、NumPy)及可视化工具(Matplotlib),安装简便 应用领域 该系统适用于医学影像、遥感等领域的语义分割任务,兼顾易用性与扩展性。用户可通过调整UNet深度或添加注意力机制等方式进一步优化性能。 【项目说明书】包含完整代码实现与原理讲解。https://blog.youkuaiyun.com/qq_44886601/category_12858320.html
内容概要:本文详细介绍了一个基于Python实现的PSO-PNN混合模型项目,旨在通过粒子群优化算法(PSO)优化概率神经网络(PNN)的关键参数(如平滑因子),从而提升数据分类预测的精度与泛化能力。文章阐述了项目背景、目标与意义,分析了在高维复杂数据、样本不均衡、噪声干扰等挑战下的解决方案,并系统介绍了整体架构,包括数据预处理、PSO优化模块、PNN分类模型、适应度函数设计、并行计算优化及性能评估等核心组成部分。文中还提供了关键代码示例,展示了从数据标准化、模型构建到优化训练和性能评估的完整流程。; 适合人群:具备一定Python编程和机器学习基础,从事数据分析、智能算法研究或工程应用的研发人员、研究生及算法爱好者;尤其适合希望深入了解智能优化算法与神经网络融合应用的中级学习者。; 使用场景及目标:①解决PNN模型依赖人工调参的问题,实现平滑因子的自动优化;②提升复杂、高维、小样本或不均衡数据下的分类准确率;③应用于金融风控、医疗诊断、工业故障检测等高精度分类场景;④学习PSO与PNN协同机制及其工程实现方法。; 阅读建议:建议结合文中提供的代码示例与理论描述同步实践,重点关注适应度函数设计、PSO参数配置与交叉验证的集成,调试时注意收敛性与过拟合控制,以深入掌握该复合模型的优化逻辑与应用技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值