关于前后端分离接口和展示层的一些问题

2019-07-02 11:41:09 +08:00
 lihongjie0209
  1. 排序问题

假如接口返回的数据是 3 1 2, 但是前端需要展示的是 1 2 3, 并且没有分页, 一共就 3 条数据, 那么这个排序是前端做还是后端做.

  1. 数据整理问题

假如接口返回的是一个数组, 但是前端需要一个树, 那么这个数据整理是前端做还是后端做.

我的想法是后端和展示层不依赖, 数据整理和排序都应该是展示层的工作.

实际情况是前端做起来很费力, 只能我专门写一个整理好的接口.

再次说明了: 技术问题最终还是人的问题.

10805 次点击
所在节点    程序员
131 条回复
MotherShip
2019-07-02 11:44:16 +08:00
1 取决于这个接口是否有其他端调用,没有的话可以后端改

2 数据结构还是后端做吧
akari33
2019-07-02 11:45:01 +08:00
1.前端 2.后端做一个 vo 实体类返回给前端
dongisking
2019-07-02 11:47:02 +08:00
排序问题
一般是我后端做
数据整理问题
一般是我后端做(例:评论和 reply 评论)
April5
2019-07-02 11:47:05 +08:00
没说清楚前端难在哪
LongMaoz
2019-07-02 11:53:13 +08:00
目前我是用 TypeScript 写前端数据结构,NetCore 写后端接口
后端的数据返回结构可能跟前端所需要的不一样,所以我前端是把后端的 BaseModel 搬过去作为基类,
然后前端的数据结构在 BaseModel 上 Extend,后端只做数据返回,比如你的第二种情况,
我是把后端的数据丢进前端的已经 Extend 的类种的构造函数里面进行实例化,这样就可以后端只返回数据
前端的 BaseModel 用来接收数据,同时创建新 Class 用来 Extend 基类,类中再进行数据转换以及整理,这样应该是可以完美实现你的需求的
passerbytiny
2019-07-02 11:54:20 +08:00
前端 Model 层或类似层,后端视图层或者端口适配层,都可以做,谁做只取决于谁愿意和有时间干,跟技术无关。技术上可以确认的是,非常不能让后端业务层去做,不建议前端展示层去做。
stx2012
2019-07-02 11:56:45 +08:00
当数据量大的时候,前端计算很费资源和时间,还是后端做比较好
LongMaoz
2019-07-02 12:00:34 +08:00
后端返回结构👇

export interface ApiResult<T> {
code: number;
msg: string;
result: T;
}

T 里面放后端的数据结构基类
然后 T 类的 Extend 的类中定义构造器参数为 T 类
进行实例化就可以了

前端基于后端的 T 类 进行 extends 的结构( Contact 类就是我 Group 类用到的基类,也就是后台返回的 T 类型)👇
export class Group extends Contact {

public upperlimit: number;
public creater: string;
public announcement: string;

constructor(baseGroup: BaseGroup) {
super({
key: baseGroup.id.toString(),
name: baseGroup.name,
imgSrc: baseGroup.logo
});
this.creater = baseGroup.createUserID.toString();
this.upperlimit = baseGroup.grade;
this.announcement = baseGroup.description;
}
}
cwjokaka
2019-07-02 12:10:22 +08:00
如果我是前端,我会倾向于给后端做。反之亦然
ben1024
2019-07-02 12:13:48 +08:00
加个 Formatters 层
lneoi
2019-07-02 12:14:23 +08:00
如果整理数据太耗费时间,比如又排序又对比还得重新组织结构,或者多端都需要重复这一步骤,这块就归后端处理了。
cyndihuifei
2019-07-02 12:17:48 +08:00
这种事情后端处理没什么好说的吧,我自己既是后端也是前端,很反感前端对接个接口还要处理来处理去
liuhuansir
2019-07-02 12:21:22 +08:00
你举例的两个,真的可以无所谓谁来做,完全看人的,有人觉得举手之劳,顺带就做了,有人嫌麻烦,就让对方做
PerpetualHeng
2019-07-02 12:22:55 +08:00
两种都有,前后端都可以,但是全部后端处理,会更好一些。
bin20060407
2019-07-02 12:25:48 +08:00
前端能做,不代表前端一定要做,尽量让前端渲染数据更简单是我们这边后端团队的宗旨。
kanezeng
2019-07-02 12:34:00 +08:00
其实我觉得这两个例子都无所谓吧,大多数时候我都是后端直接做好了出来。不过如果真碰到需要转换的时候有时候我也放用户的前端,让用户的机器帮我们的后端分担点计算资源嘛。
will0404
2019-07-02 12:42:28 +08:00
这两点前端都能做,而且很简单,但不应该由前端来做。前端的职责是渲染和交互,仅此而已。
通常不太负责的后端会说,这么简单的事你前端做一下就好了,我会怼回去,你不会写的话我来帮你写后端。
serge001
2019-07-02 13:03:20 +08:00
我觉得前端做,这样才够灵活,不然你今天要这样的排序,明天又想要那样的排序,后端的接口岂不是要反复变;然后对于所说的扁平数据变树跟树状数据变扁平, 除非数据量很大,影响到了性能跟体验,还是在前端做比较好,因为前端可能同时用到扁平数据跟树状数据;
xuanbg
2019-07-02 13:08:05 +08:00
排序一般都是后端做,因为排序往往还有分页。树形显示不是只要对象包含 id 和父级 id,前端组件数据绑上去就好的吗?
lihongjie0209
2019-07-02 13:22:38 +08:00
@serge001 我主要也是有这方面的顾虑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/579241

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX