基于模块自定义扩展字段的后端逻辑实现(一)

目录

一:背景介绍

二:实现过程

三:字段标准化

四:数据存储

五:数据扩展

六:表的设计


一:背景介绍

最近要做一个系统,里面涉及一个模块是使用拖拉拽的形式配置模块使用的字段表单,主要包括新建/编辑模块,模块详情等。这里涉及的重点是新建模块的表单是手动拖拉拽配置出来的,里面的字段类型和数量也是任意的。

配置完以后,在新建模块页面可以读取配置的表单数据,用户填写数据,保存数据,在列表或者详情查看。

二:实现过程

基于模块自定义扩展字段的后端逻辑实现,通常涉及到以下几个步骤:

首先,需要明确业务需求。确定需要哪些扩展字段,以及这些字段的用途。例如,一个用户管理模块可能需要一个自定义字段来存储用户的生日。

数据库设计:在设计数据库时,你需要为每个自定义扩展字段创建一个新的列。通常,这些列会存储在一个专门的表中,这个表会和主表(例如用户表)通过某种关联(例如外键)进行连接。

后端逻辑实现:

模型定义:在后端代码中,你需要定义一个模型来映射到数据库中的表。

数据存储:当需要存储数据时,你可以创建一个方法来处理自定义字段的存储。这个方法应该能够接受一个对象,其中包含所有的字段(包括自定义字段),然后将这些字段存储到数据库中。

数据检索:当需要从数据库中检索数据时,你需要创建一个方法来获取所有的字段,包括自定义扩展字段。这个方法应该能够返回一个包含所有字段的对象。

数据更新:当需要更新数据时,你可以创建一个方法来处理自定义字段的更新。这个方法应该能够接受一个对象,其中包含所有的字段(包括自定义字段),然后将这些字段更新到数据库中。

前端交互:在前端界面上,你需要为每个自定义扩展字段提供一个输入框或其他类型的输入控件。当用户填写这些字段并提交表单时,前端代码应该将这些数据发送到后端进行处理。

安全性和验证:在处理数据时,你需要确保数据的安全性和完整性。例如,你可以使用输入验证来确保用户输入的数据是有效的,并且符合你的业务规则。

三:字段标准化

这样的业务问题,我们要做的开发,首先要把问题标准化。上面谈到字段是自定义的,因为涉及到逻辑编码,我们需要把字段归类分组,字段的作用是在表单创建和展示使用,我们正常的创建表单一般是一个标题对应一组字段。比如说商品基础信息对应商品价格,商品数量等基本信息字段。这里的商品基础信息我们可以定义为字段分组,商品价格可以定义为字段。这样我们的字段可以分为两种类型,一种是分组仅仅是展示使用,一种是字段本身需要存储数据。我们确定了字段的类型以后,我们发现正常一个表单的字段是需要展示样式和布局的比如说input类型的单行文本和select类型的下拉数据这是两种不同的布局,因此我们的字段也是需要根据不同的类型,进行不同的处理。我们可以把常用的数据类型分组归类大致分为单行文本,多行文本,下拉,日期,单选,布尔等。

四:数据存储

上面我们把字段归类和分组,这样一个新建的表单已经可以做出来了,并且可以根据不同的字段类型显示不同的布局和样式。那么我们在表单填写完数据以后,如何存储是一个问题。由于我们的模块创建以后是需要列表展示的,那就可能涉及到搜索问题。因此我们把字段进行横向扩展是一个好方法。比如新建一个字段,我们会在业务主表里扩展一个字段。这样列表的每一个字段都是独立的,支持搜索和后期统计功能。这样新建一个模块数据,相当于主表里插入一行数据。

五:数据扩展

我们主表里的数据是一对一的,但是有些数据可能需要一对多,比如一个商品可能对应多个规格,这样规格的数据就需要多行存储。所以我们需要扩展主表的数据,需要建立一个扩展规格表,那么我们建立规格类型数据的时候,需要在扩展规格表里横向扩展数据。

六:表的设计

首先我们需要创建一个存储字段库的表,这里用来存储各种类型的字段和字段分组。前端拖拉拽的字段都来自这里,其次我们需要创建一个业务主表,用来存储一些扩展字段数据和一些固定字段。这里说下固定字段一个业务里面虽然模块是自定义拖出来的,但是必定有些字段是固定的比如创建时间,创建人等。最后我们还需要一个扩展字段表,用以保存一些一对多的数据。

相关推荐
煤泥做不到的!1 小时前
挑战一个月基本掌握C++(第十一天)进阶文件,异常处理,动态内存
开发语言·c++
F-2H1 小时前
C语言:指针4(常量指针和指针常量及动态内存分配)
java·linux·c语言·开发语言·前端·c++
gqkmiss2 小时前
Chrome 浏览器插件获取网页 iframe 中的 window 对象
前端·chrome·iframe·postmessage·chrome 插件
bryant_meng2 小时前
【python】OpenCV—Image Moments
开发语言·python·opencv·moments·图片矩
若亦_Royi3 小时前
C++ 的大括号的用法合集
开发语言·c++
资源补给站4 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
m0_748247554 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
6.944 小时前
Scala学习记录 递归调用 练习
开发语言·学习·scala
m0_748255024 小时前
前端常用算法集合
前端·算法
FF在路上5 小时前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言