当前位置: 首页 > news >正文

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

目录

一:背景介绍

二:实现过程

三:字段标准化

四:数据存储

五:数据扩展

六:表的设计


一:背景介绍

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

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

二:实现过程

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

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

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

后端逻辑实现:

模型定义:在后端代码中,你需要定义一个模型来映射到数据库中的表。
数据存储:当需要存储数据时,你可以创建一个方法来处理自定义字段的存储。这个方法应该能够接受一个对象,其中包含所有的字段(包括自定义字段),然后将这些字段存储到数据库中。
数据检索:当需要从数据库中检索数据时,你需要创建一个方法来获取所有的字段,包括自定义扩展字段。这个方法应该能够返回一个包含所有字段的对象。
数据更新:当需要更新数据时,你可以创建一个方法来处理自定义字段的更新。这个方法应该能够接受一个对象,其中包含所有的字段(包括自定义字段),然后将这些字段更新到数据库中。
前端交互:在前端界面上,你需要为每个自定义扩展字段提供一个输入框或其他类型的输入控件。当用户填写这些字段并提交表单时,前端代码应该将这些数据发送到后端进行处理。

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

三:字段标准化

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

四:数据存储

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

五:数据扩展

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

六:表的设计

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

相关文章:

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

目录 一:背景介绍 二:实现过程 三:字段标准化 四:数据存储 五:数据扩展 六:表的设计 一:背景介绍 最近要做一个系统,里面涉及一个模块是使用拖拉拽的形式配置模块使用的字段表…...

力扣:18.四数之和

一、做题链接:18. 四数之和 - 力扣(LeetCode) 二、题目分析 1.做这一道题之前本博主建议先看上一篇《三数之和》 2.题目分析 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重…...

.netcore 6 ioc注入的三种方式

1、定义接口 public interface MyInterceptorInterface 2、实现接口 public class MyInterceptorImpl : MyInterceptorInterface 在构造中增加以下代码&#xff0c;便于观察 static ConcurrentDictionary<string, string> keyValues new ConcurrentDictionary<s…...

Python轴承故障诊断 (十)基于VMD+CNN-Transfromer的故障分类

目录 1 变分模态分解VMD的Python示例 2 轴承故障数据的预处理 2.1 导入数据 2.2 故障VMD分解可视化 3 基于VMDCNN-Transformer的轴承故障诊断分类 3.1 定义VMD-CNN-Transformer分类网络模型 3.2 设置参数&#xff0c;训练模型 3.3 模型评估 代码、数据如下&#xff1a…...

【复习】人工智能 第7章 专家系统与机器学习

专家系统就是让机器人当某个领域的专家&#xff0c;但这章专家系统不咋考&#xff0c;主要靠书上没有的机器学习。 一、专家系统的基本组成 二、专家系统与传统程序的比较 &#xff08;1&#xff09;编程思想&#xff1a; 传统程序 数据结构 算法 专家系统 知识 推理 &…...

使用 Apache PDFBox 操作PDF文件

简介 Apache PDFBox库是一个开源的Java工具&#xff0c;专门用于处理PDF文档。它允许用户创建全新的PDF文件&#xff0c;编辑现有的PDF文档&#xff0c;以及从PDF文件中提取内容。此外&#xff0c;Apache PDFBox还提供了一些命令行实用工具。 Apache PDFBox提供了创建、渲染、…...

【Python 常用脚本及命令系列 3.2 -- 检测到弹框跳出然后关掉它--脚本实现】

文章目录 简介脚本实现 简介 在Python中&#xff0c;你可以使用第三方库如pyautogui和pygetwindow来检测屏幕上的弹框并关闭它。这些库可以模拟鼠标和键盘操作&#xff0c;也可以获取窗口信息。 首先&#xff0c;需要安装这些库&#xff08;如果你还没有安装的话&#xff09;&…...

junit单元测试:使用@ParameterizedTest 和 @CsvSource注解简化单元测试方法

在平常的开发工作中&#xff0c;我们经常需要写单元测试。比如&#xff0c;我们有一个校验接口&#xff0c;可能会返回多种错误信息。我们可以针对这个接口&#xff0c;写多个单元测试方法&#xff0c;然后将其场景覆盖全。那么&#xff0c;怎么才能写一个测试方法&#xff0c;…...

C# winform判断自身程序是否已运行,如果已运行则激活窗体

C# winform判断自身程序是否已运行&#xff0c;如果已运行则激活窗体 using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Threading; using Syst…...

超维空间M1无人机使用说明书——21、基于opencv的人脸识别

引言&#xff1a;M1型号无人机不仅提供了yolo进行物体识别&#xff0c;也增加了基于opencv的人脸识别功能包&#xff0c;仅需要启动摄像头和识别节点即可 链接: 源码链接 一、一键启动摄像头和人脸识别节点 roslaunch robot_bringup bringup_face_detect.launch无报错&#…...

Redis 持久化——AOF

文章目录 为什么需要AOF?概念持久化查询和设置1. 查询AOF启动状态2. 开启AOF持久化2.1 命令行启动AOF2.2 配置文件启动 AOF 3. 触发持久化3.1 自动触发3.3 手动触发 4. AOF 文件重写4.1 什么是AOF重写&#xff1f;4.2 AOF 重写实现4.3 AOF 重写流程 5. 配置说明6. 数据恢复6.1…...

华为云服务介绍(二)

在 华为云服务介绍(一) 中我们看到华为云提供了一系列的云服务,包括计算、存储、网络、数据库、安全等方面的解决方案。通过灵活的系统架构设计,可以充分利用这些云服务技术,从而更好地满足用户的需求。 本文从系统架构的角度出发,通过充分利用华为云提供的各种云服务技…...

mysql列题

mysql列题 1.查询学过「张三」老师授课的同学的信息2.查询没有学全所有课程的同学的信息3.查询没学过"张三"老师讲授的任一门课程的学生姓名4.查询两门及其以上不及格课程的同学的学号&#xff0c;姓名及其平均成绩5.检索" 01 "课程分数小于 60&#xff0c…...

cpu缓存一致性

文章目录 cpu缓存一致性缓存的出现&#xff1a;多核之后带来的缓存一致性问题&#xff0c;如何解决LOCK 指令&#xff08;刚好可以实现上述的目标&#xff09;LOCK 指令特性内存屏障特性编译器屏障的作用MESI协议为什么有了 MESI协议 还需要 内存屏障问题&#xff1a;总结&…...

Android Framework 常见解决方案(25-1)定制CPUSET解决方案-framework部分修改

1 原理说明 这个方案有如下基本需求&#xff1a; 构建自定义CPUSET&#xff0c;/dev/cpuset中包含一个全新的cpuset分组。且可以通过set_cpuset_policy和set_sched_policy接口可以设置自定义CPUSET。开机启动后可以通过zygote判定来对特定的应用进程设置CPUSET&#xff0c;并…...

PyTorch 参数化深度解析:自定义、管理和优化模型参数

目录 torch.nn子模块parametrize parametrize.register_parametrization 主要特性和用途 使用场景 参数和关键字参数 注意事项 示例 parametrize.remove_parametrizations 功能和用途 参数 返回值 异常 使用示例 parametrize.cached 功能和用途 如何使用 示例…...

自承载 Self-Host ASP.NET Web API 1 (C#)

本教程介绍如何在控制台应用程序中托管 Web API。 ASP.NET Web API不需要 IIS。 可以在自己的主机进程中自托管 Web API。 创建控制台应用程序项目 启动 Visual Studio&#xff0c;然后从“开始”页中选择“新建项目”。 或者&#xff0c;从“ 文件 ”菜单中选择“ 新建 ”&a…...

Vue2-子传父和父传子的基本用法

在Vue 2中&#xff0c;可以使用props和$emit来实现子组件向父组件传值&#xff08;子传父&#xff09;和父组件向子组件传值&#xff08;父传子&#xff09;。 子传父&#xff08;子组件向父组件传值&#xff09;的基本用法如下&#xff1a; 在父组件中定义一个属性&#xff…...

使用numpy处理图片——镜像翻转和旋转

在《使用numpy处理图片——基础操作》一文中&#xff0c;我们介绍了如何使用numpy修改图片的透明度。本文我们将介绍镜像翻转和旋转。 镜像翻转 上下翻转 from PIL import Image import numpy as np img Image.open(example.png) data np.array(img)# axis0 is vertical, a…...

HTML5 article标签,<time>...</time>标签和pubdate属性的运用

1、<article>...</article>标签的运用 article标签代表文档、页面或应用程序中独立的、完整的、可以独自被外部引用的内容。它可以是一篇博客或报竟杂志中的文章、一篇论坛帖子、一段用户评论或一个独立的插件&#xff0c;或者其他任何独立的内容。把文章正文放在h…...

为什么你的Flask农业API总在灌溉高峰期崩?Python高并发部署的4层熔断架构设计(实测QPS提升6.8倍)

第一章&#xff1a;为什么你的Flask农业API总在灌溉高峰期崩&#xff1f;Python高并发部署的4层熔断架构设计&#xff08;实测QPS提升6.8倍&#xff09; 当全省智能灌溉系统在每日清晨5:00–7:00集中调度水阀、上传土壤墒情数据时&#xff0c;基于默认配置的Flask API常出现进程…...

零基础手写大模型

从零搭建大模型&#xff1a;零基础学习实现职业经济跃迁指南 引言 在人工智能重塑全球产业格局的今天&#xff0c;“大模型”已不再仅仅是科技巨头的专利&#xff0c;而是成为了数字经济时代新的“电力”与“石油”。对于广大职场人士、创业者及寻求转型的个体而言&#xff0…...

这次终于选对了!盘点2026年圈粉无数的AI论文网站

一天写完毕业论文在2026年已不再是天方夜谭。这是2026年最炸裂、实测能大幅提速的AI论文网站&#xff0c;覆盖选题、写作、查重、排版全流程&#xff0c;真正帮你高效搞定论文。 一、全流程王者&#xff1a;一站式搞定论文全链路&#xff08;一天定稿首选&#xff09; 这类工具…...

嵌入式软件工程师面试技术要点解析

嵌入式软件工程师面试技术要点解析1. 通信接口技术1.1 RS-485通信特性RS-485标准采用差分信号传输&#xff0c;物理层上支持全双工通信&#xff0c;但在实际应用中通常配置为半双工模式。这种设计选择主要基于以下工程考虑&#xff1a;半双工模式下只需一对双绞线&#xff0c;显…...

云效流水线实战:从零部署Java应用到阿里云ECS(含完整脚本)

云效流水线实战&#xff1a;从零部署Java应用到阿里云ECS&#xff08;含完整脚本&#xff09; 在当今快节奏的软件开发环境中&#xff0c;自动化部署已成为提升团队效率的关键环节。阿里云云效平台提供的流水线功能&#xff0c;为开发者提供了一套完整的CI/CD解决方案&#xff…...

如何用ChatALL实现AI智能协同:一次提问,多模型对比的解决方案

如何用ChatALL实现AI智能协同&#xff1a;一次提问&#xff0c;多模型对比的解决方案 【免费下载链接】ChatALL Concurrently chat with ChatGPT, Bing Chat, Bard, Alpaca, Vicuna, Claude, ChatGLM, MOSS, 讯飞星火, 文心一言 and more, discover the best answers 项目地…...

MediaPipe Holistic实战效果:一张照片生成全身骨骼图,效果超乎想象

MediaPipe Holistic实战效果&#xff1a;一张照片生成全身骨骼图&#xff0c;效果超乎想象 1. 引言&#xff1a;当AI遇见全身感知 想象一下&#xff0c;你只需要上传一张普通的全身照片&#xff0c;AI就能自动识别出你的面部表情、手势动作和身体姿态&#xff0c;并生成一张精…...

2025终极指南:如何快速解锁雀魂全角色皮肤?Mod工具使用全攻略

2025终极指南&#xff1a;如何快速解锁雀魂全角色皮肤&#xff1f;Mod工具使用全攻略 【免费下载链接】majsoul_mod_plus 雀魂解锁全角色、皮肤、装扮等&#xff0c;支持全部服务器。 项目地址: https://gitcode.com/gh_mirrors/ma/majsoul_mod_plus 还在为无法体验雀魂…...

MinerU本地部署安全吗?数据隐私保护实战配置

MinerU本地部署安全吗&#xff1f;数据隐私保护实战配置 1. 引言&#xff1a;当AI遇见你的敏感文档 想象一下这个场景&#xff1a;你有一份包含商业机密的合同PDF&#xff0c;或者一份涉及个人隐私的医疗报告扫描件。你想用AI快速提取里面的关键信息&#xff0c;但又担心把文…...

Unity游戏翻译神器XUnity.AutoTranslator全攻略:从入门到精通

Unity游戏翻译神器XUnity.AutoTranslator全攻略&#xff1a;从入门到精通 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 问题导入&#xff1a;当游戏语言成为体验障碍 你是否曾遇到这样的困境&#xff…...