前端要求后端传来的数据格式能够直接用于渲染是不合理的
同样,后端直接从数据库里扒下来的数据格式就丢给前端也是不合适的。
—————————————————————————————
前端和后端对于数据的需求是不一样的。
前端的数据是用于展示的,展示的形式有很多样,数据的形式也很多样,将这一部分数据的逻辑抛给后台,会带来不必要的耦合。前端更改下显示效果还需要修改后台代码,显然不合适。
后端的数据需要通过关系型数据库进行持久化存储,自然要受到数据库表/行的格式的束缚。如果后端交付的接口是基于数据库的形式而非业务模型的形式,那么每个调用者都要进行数据库格式到业务模型之间的转换,这同样不合适。
这个接口和程序语言里面的接口思想上是类似的,都是一种对业务/功能行为的抽象。
—————————————————————————————
然,知道这个并没有什么用。前端和后端在接口数据格式上还是该撕逼撕逼。
—————————————————————————————
看了其他答者的答案,更新下。
前端要求后端传来的数据格式能够直接用于渲染,是什么一个情况呢?举个例子,后端提供一个接口获取某单位所有人员的接口。前端则需要根据用户的职级分类显示,那么前端的数据显然是要根据不同职级进行合并,这合并的数据操作能放到后端的接口中么,显然是不行的。假如需求改了,或者其他入口需要根据年龄段分类显示所有人员,本来这只是跟前端显示有关系的需求变更反而还需要改后台代码。
后端直接从数据库里扒下来的数据格式就丢给前端,又是个什么情况?一个更为常见的例子就是树格式。数据库的格式是基于行和表的,并不存在嵌套,是不可能的存在一个children 属性里面包含子节点的格式。所以一般数据库存一个树格式的数据是通过 _parent 标识当前节点的父结点的方式。然而前端这边是不可能需要这种格式渲染一个树的,于是每一个调用接口的地方都会写这么一套转换逻辑。当然前端可以抽离一个通用的函数进行统一转换,但是不同的平台仍要都要写一套转换逻辑。仅仅是多些几次也就罢了,但是通过 _parent 这种方式描述一个树是不准确的,万一某个节点的父结点不存集合中是应该直接舍弃还是当作根节点?_parent 存在循环引用怎么办?这种业务逻辑和错误本应该在后端做处理,然而现在则上浮到前端才被发现。
前后端分离的场景下,大家都知道要做到前后端职责的分离。前端的职责是通过调用后台提供的接口,构造用户界面。前端需要感知到数据库结构吗?并不需要,数据库是后端用于数据持久化的工具罢了,后端用什么方式做数据持久化跟我如何构造用户界面并无关系。反之,后台需要感知到用户界面是什么样子吗?同样不需要,后端只需要提供符合业务模型的接口罢了,如何构造用户界面是前端的事。
为啥又说知道这个没卵用,该撕逼还是撕逼呢?以上所说的都是理想情况,然而实际开发往往并非能够很好落实。我知道什么是"正确"的做法,如何去抽象,我可以用这一套约束我的代码,但是当我开始约束别人的时候往往会遇到问题。抽象和规范是有成本的,我来付这成本当然没人有意见,当要求别人付出别人难免会有意见,特别是项目工期紧张/跨工种/架构不合理/人员素质良莠不齐的情况下。很多答者所认为“前端能处理就放到前端处理”“前端做比较方便”,其实都是这种思路。而很多人提到的性能问题,做一些数据格式转换和数据校验说实话我并不觉得会对服务器产生多大的性能瓶颈,相比服务端渲染,这点性能消耗只能算小巫见大巫。当然这也不是针对后端同学,像很多答者没提到的问题比如浏览器对并行的请求数量有限制要求后端对提供的接口进行合并,其实也就是前端不愿付出 BFF 层的成本罢了。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有