首页 > 数据库 >一般后端返回的数据结构是数据库中的存储结构,与前端需要展示的结构不一样对吗?

一般后端返回的数据结构是数据库中的存储结构,与前端需要展示的结构不一样对吗?

时间:2024-03-15 23:33:21浏览次数:26  
标签:返回 展示 数据库 数据结构 数据 前端 冗余 结构

是的,一般情况下后端返回的数据结构确实可能与前端需要展示的结构不完全一样。原因有以下几点:

  1. 数据库存储结构
    后端从数据库中查询到的数据通常遵循数据库表的设计,包括关系型数据库中的外键关联、嵌套数据等。这些数据可能是为了满足数据库设计规范和查询效率而组织的,并不一定直接符合前端展示的需求。

  2. 业务逻辑处理
    后端在返回数据之前,可能会进行一些业务逻辑处理,如权限过滤、数据聚合、计算结果等操作,这可能导致返回给前端的数据比原始数据库中的数据更为复杂或简化。

  3. 数据冗余问题
    为了提高前端页面性能和用户体验,有时后端会将原本需要通过多次请求才能获取的关联数据预先合并到一起返回,这样前端就不需要额外发起请求来加载相关联的信息。

  4. 前端展示需求
    前端展示时可能需要更直观、用户友好的格式,比如日期时间的格式化、图片URL而不是二进制数据、自定义排序、分页信息等,这些都是根据用户界面(UI)设计和用户体验(UX)需求定制的,因此前端需要对后端返回的数据进行一定的转换和加工。

综上所述,前端开发人员通常需要对接收到的后端数据进行解析和适配,以便更好地呈现给用户。同时,前后端之间应该有明确的数据接口约定,确保双方能够准确无误地交流数据。

那为啥不是后端返回的时候处理好给我?

后端在返回数据时,确实可以处理好以适应前端的展示需求,但这并不是必须的,原因如下:

  1. 职责分离
    后端和前端的主要职责不同。后端主要负责数据的存储、查询、业务逻辑处理等;而前端则专注于用户界面展示、交互处理以及数据渲染。让后端处理所有前端展示相关的工作,可能会模糊前后端的界限,使得项目维护和扩展变得困难。

  2. 灵活性
    不同场景下,前端可能需要对同一份数据进行不同的展示方式。如果每次变更前端需求都去修改后端代码,不仅效率低下,也容易导致后端代码冗余。将数据适配的任务交给前端,可以让前端根据具体需求灵活调整。

  3. 性能优化
    前端可以根据实际需要选择性地加载和转换数据,比如懒加载关联数据、按需解析复杂对象等。如果后端一次性返回所有处理好的数据,可能导致网络传输量增大,影响页面加载速度。

  4. 解耦合
    如果后端直接返回适配过前端的数据结构,那么当前端需求改变时,后端就需要相应修改,增加了前后端之间的耦合度。保持一定的解耦,可以让前端迭代更为独立且快速。

尽管如此,在实际开发中,为了提高效率和用户体验,有时后端也会提供一些预处理过的数据给前端使用,特别是在数据格式统一、变化不大或者有明确约定的情况下。
但在设计API时,通常建议遵循RESTful原则,尽可能提供原始、清晰的数据结构,并允许前端根据需要自行处理。

第三点不是很认同,后端经常返回冗余数据,前端不需要展示的

您说得对,我之前的回答中关于性能优化的第三点确实没有完全覆盖所有场景。在某些情况下,后端可能确实会返回前端并不需要展示但对其他功能有用的数据,这可以看作是一种“冗余”。这种情况下的数据冗余可能是出于以下原因:

  1. 减少请求次数
    为了提高用户体验,后端可能会在一个API请求中返回多个关联资源的数据,即使前端在当前页面并不展示全部信息,但在后续操作(如导航、交互等)中可能需要用到这些数据。

  2. 缓存和复用
    后端一次性返回较多数据,使得前端可以将部分暂时不需要但未来可能会用到的数据进行本地缓存,避免了多次重复请求带来的延迟和服务器压力。

  3. 业务逻辑处理
    在一些复杂的业务场景下,后端可能需要提供额外的数据来辅助前端完成某些计算或校验工作,虽然这部分数据不直接用于显示,但在实现特定功能时是必要的。

当然,合理控制数据冗余对于性能优化仍然非常重要,前后端之间应保持良好的沟通和协调,确保数据传输的效率与合理性。
在设计API时,可以根据具体需求决定是否让后端处理好前端所需的数据结构,还是返回原始数据由前端自行解析和处理。

标签:返回,展示,数据库,数据结构,数据,前端,冗余,结构
From: https://www.cnblogs.com/longmo666/p/18076493

相关文章

  • 数据库应用——一些复健
    1、创建数据库students,字符集UTF8 排序规则utf8_general_ci 2.创建3个表2.2修改表  给表student添加字段photot,类型blob;修改字段photo的类型为text;删除字段photo.3.插入数据 3.2在course表中添加数据('C009','java','2','3');把java改为软件工......
  • 基于springboot的图书推荐管理系统、图书借阅管理系统,附源码+数据库+论文+PPT,包远程安
    1、项目介绍本论文主要论述了如何使用JAVA语言开发一个图书个性化推荐系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述图书个性化推荐系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系......
  • 记录学生的姓名、编号以及总分,输入n,代表学生个数,要求用结构体泡排序将学生信息按学生
    //记录学生的姓名、编号以及总分,输入n,代表学生个数,要求用结构体,//用冒泡排序将学生信息按学生总分从低到高排名,将学生信息打印出来;//并输入一个总分x,用折半查找查找所有总分为x的学生,并将学生信息打印出来#include<stdio.h>#include<stdlib.h>structStudent{ ch......
  • QT TreeWidget控件实现文件树 展示目录结构
    目录1、获取盘符,以及一级子文件2、getFileOnDirectory函数,遍历指定文件夹的一级子文件3、绑定展开信号和槽函数,遍历指定文件4、QTreeWidgetItem::setData()用法如图所示,这里仅仅实现展示目录结构,对于新增文件、修改文件、删除文件会后续补充。 思路:这里我并没有在程序......
  • 高性能 数据库连接池 HikariCP | HikariCP 配置详解
    ......
  • 高性能 数据库连接池 HikariCP | MySQL 最佳性能实践
    ......
  • chapter10-非线性数据结构
    机试中考查的一些非线性数据结构,包括二叉树、二叉排序树、优先队列和散列表。1.二叉树(BinaryTree)对于二叉树来说,机试中常考的是其各种遍历方法,分为前序、中序、后序遍历,以及层次遍历。1.2二叉树遍历题目描述+输入输出题目描述:二叉树的前序、中序、后序遍历的定义。前......
  • 数据结构导论
    2024.3.15Author:芝士wa参考视频链接:bilibili-深入浅出数据结构1.数据结构的定义数据结构是一种方法,是计算机存储和组装数据的方式,使这些数据可以得到有效利用2.数据结构的分类AbstarctDataType(ADT)数组Array链表LinkedList栈stack队列queue树tree图grap......
  • 数据结构之链式二叉树
    当我们初步了解二叉树后我们就可以进一步去深入学习二叉树了1.链式二叉树的遍历这里我们先去定义链式二叉树的结构分为两个指针一左一右他们分别指向左子树和右子树typedefintBTDataType;typedefstructBinaryTreeNode{ BTDataTypedata; structBinartTreeNode......
  • springBoot 配置 国产达梦数据库
    1.pom<!--达梦数据库驱动--> <dependency> <groupId>com.dm</groupId> <artifactId>DmJdbcDriver18</artifactId> <version>1.8</version> </dependency>maven中央仓库里面没有,需要手动安装到maven本地仓库mvni......