为什么我不喜欢「前后端分离」(个人观点,欢迎来喷)

2016-08-09 07:17:39 +08:00
 FrankFang128

原文在 http://iwritejs.com/dont-seperate-backend-and-frontend/


我不知道国外有没有「前后端分离」的运动,我只知道国内的大公司喜欢搞这个。

前后端分离大概的意思就是后端只给前端提供数据,前端负责 HTML 渲染(可以在服务器渲染,也可以在浏览器渲染)和用户交互。

说这个说得最多的就是阿里的前端了。同时阿里的前端也是在中国最活跃的。

为什么做前后端分离?

本篇文章我来腹黑地揣测一下原因。以下言论不针对某个个人,而是对前端群体的群嘲。我坦然接受你的反嘲讽。

最开始的前后端:

图一

某些团队做前后端分离,主要的原因是

在前后端分离之前,前端就是页面仔。技术大牛都是后端,鲜有前端能晋升到架构师层级。这不是对前端的歧视,而是前端真的只是做做页面、加个动效而已,凭什么晋升到架构师。

当时前端能控制的,就是 CSS 和 JS 文件。连 HTML 都是放在后端的仓库的。因为 HTML 是由服务器输出的,用到的模板语言就是后端的。

Node.js 火了之后,前端看到一个机会, HTML 是可以用 Node.js 来输出的呀,于是鼓吹前后端分离,把 HTML 层面交给前端来控制。这样前端就能管控更多的东西了(好可怜,终于能掌握 HTML 的控制权了)

HTML 如果放在浏览器渲染,就是下图

图二

HTML 如果用 Node.js 渲染,就是这样

图三

看起来只是掌握了 HTML 的控制权,但是这里面可以做的文章可多了。

以前 HTML 是 Java 、 PHP 输出的,或多或少存在效率不高的地方,现在用 Node.js 重写,效率是不是就提升了(很少有程序重写了,效率还下降的)。效率提升了是不是该奖励下前端,给几个晋升名额呢?

前端得到好处了,就更要巩固自己的地位了。以前的 jQuery 代码,后端看看就懂。「那不行,我要搞点后端看不懂的」,这样才能显示我前端的技术含量,这样才能升值加薪啊。于是 React 、 Gulp 什么全加上。

好了,我编不下去了。

总之我不认同这种前后端分离。

为什么?

因为

  1. 又增加了一个中间层(当然程序员通过增加中间层来解决问题),好处是有,职责明确;但是也有坏处:人为地拉长了战线。对比图一和图三你就会发现,结构变复杂了,一个人能做的事情变成需要两个人做了
  2. 并没有实质变化。以前的后端结构也是存在调用 Service 逻辑的,现在只不过换成让前端用 Node.js 做。除了把本来就吃紧的前端人力耗费在他不擅长的领域,我没看到什么提升。这里唯一的好处就是前端是势力范围扩大了。

我认同的是「全栈工程师」。

一个业务的前后为什么要分给两个人写?以表单提交为例,后端要对数据做校验,前端也要做。为什么要让两个人都写一次?前端说可以让后端也写 Node.js ,这样就可以服用代码了呀。

搞笑吗?后端写了三年的 Java 你现在告诉他要全部重来?后端肯定不愿意啊。

矛盾就出在,分『后端』和『前端』两个职位上。

大公司细分后端和前端,也是可以理解的。这里不表。

我只是说前端端分离的缺点:

  1. 大部分站点,不应该分前后端。除非你的前端,非常非常非常复杂。但是大部分站点的前端,根本没有那么复杂!

  2. 分了前后端很容易出现各自为政的情况。推诿、邀功、互相鄙视,不一一列举了。

  3. 有人问一个人怎么又学后端又学前端?我的建议是把前端做薄,如果没有必要,不要搞什么 Angular 、 React 。用原生 JS 或者 jQuery 能满足大部分网站。同时后端向 Rails 学习。局部交互复杂的地方,采用动态加载来做交互。

  4. 有人说你是前端的叛徒,你这么做前端还有什么前途。

    搞笑,你做了前端就要一辈子为前端说话吗?太屁股决定脑袋了吧。

标题有点标题党,其实真正主题是:前后端分离是前端不得志的必然结局。(好像更标题党了 XD )


难道前后端分离没有好处吗?

我觉得只有一个好处:好招聘。毕竟你要招一个优秀的全栈工程师是极其困难的。

有人说,你真有意思,说这么多缺点,你还不是给不出解决方案,说了跟没说一样。

说下我的思路

  1. 保持前端简单,复杂了就用原生的方式封装,具体来说就是用自定义标签来封装复杂组件。这样一来,后端同事还是可以开发页面,因为只是多了一个自定义标签而已,本质还是 HTML

  2. 尽量不要在开发状态加 watcher ,目的也是让后端可以直接上手,不需要了解那么多工具。转译放到 Web 框架的开发者模式里面做,看到 less 请求加转义成 CSS 不是什么难事也不复杂。

  3. 前端只是辅助(这里说的是大多是网站,不包括重型 Web 应用),前端要做好服务化:健全的文档、友好的接口。

  4. 前端也要学后端知识,别在那自嗨。

  5. 小公司别搞前后端分离,徒增复杂度!!!

128214 次点击
所在节点    JavaScript
562 条回复
jsjgjbzhang
2016-08-09 10:18:12 +08:00
做网页的都是太闲了么
bdbai
2016-08-09 10:19:05 +08:00
@geew 公司网站没必要分离吧,姿势水平高的甚至可以玩纯静态了。

后端用 Java 、 C#甚至 C 写的干干净净的 API ,你让它来个聚合+渲染?老板给我两份工资!
newguest
2016-08-09 10:19:28 +08:00
无意义的争吵, php 是世界上最好的语言。
laravel , symfony 本身架构很好,模版引擎也不错,自己写个 sass , less , coffejs 也不难呀。
用个 bower , exir , npm 。用点其它 js 开源库,加载进模版一点都不乱。普通网站妥妥的!
hanyouchun66
2016-08-09 10:19:30 +08:00
那等你做过两年后端在谈这个话题吧.
jarlyyn
2016-08-09 10:21:42 +08:00
前后端分离好处很多。

测试,多客户端,易缓存,降低员工需求。

至于框架,难道现在的这些框架出来前前后端就不分离了么?

只用 jquery 就做不了前后段分离了么?
taoche
2016-08-09 10:21:52 +08:00
现在的问题是大部分 前端开发者能力太低,编程素质不够...
不知道如果去做取舍达到一种合适的平衡。
所以就形成了跟风和盲从 拿到 Vue React 就觉得找到了 「银弹」
就像很多创业公司 不论项目是什么类型 都上 React Redux... 导致一系列问题

不过这也不需要过度关心,让时间去证明好了
xwartz
2016-08-09 10:24:10 +08:00
前后端不分离,发布很麻烦。。。总不能改下模板就要前后端一起发布吧?
adv007
2016-08-09 10:26:06 +08:00
呵呵,在中国当前的技术背景下,自称自己是全栈工程师的技术人员往往在每个领域都没做到最好,说白了,就是浮躁
inherited
2016-08-09 10:27:08 +08:00
前后端分离和组件化是客户端开发(Windows, iOS, Android)中早已实现的东西。客户端程序员负责界面搭建和数据展示,后端程序员只给数据就行了,目前 Web 应用的复杂度已经赶上客户端的应用了,使用客户端的开发方式是很正常的。我不认为做网站,App 和桌面应用的 GUI 开发除了语言之外有很本质的区别,主要功能都是数据展示,界面搭建和人机交互。它里面也有一些通用的思想和模式来解决问题,比如进来比较流行的 FRP(比如著名的 Reactive X 系列,在 Js 上就是 RxJs Angular2 也是受这套框架的启发)。
123s
2016-08-09 10:27:34 +08:00
跟 node.js 有毛关系
bdbai
2016-08-09 10:28:32 +08:00
个人认为楼主看轻后端了。
业务复杂度上去以后,即便前后端分离,“同样的代码”也绝对不会出现两遍。
一个页面渲染所需的数据,很多时候不仅仅来源于一个 API 。把 data.json 改成 data.html 并不解决问题,因为单纯渲染它也许并没有意义。
简单和省人力?后端也许从不熟悉 W3C ,简直要炸毛了喂。
shyling
2016-08-09 10:31:57 +08:00
@FrankFang128 例如 gmail/inbox...
mars0prince
2016-08-09 10:34:55 +08:00
看来楼主在 BAT 这三四年,技术方面不敢断言,至少工程方面没学到啥。
咱们的项目里,工作量都是一定的,同等水平的人,假设前端 2 小时,后端 6 小时,你一个人 8 小时能干完,但是假如项目需要 4 小时上线,怎么办?你是招一个和你同等水平的全栈工程师便宜,还是招一个前端便宜?
软件工程软件工程,说白了还是工程,不是每个公司都能像什么 google , facebook ,开得出人人全栈的钱,你们公司全是全栈,也不代表业界就应该全是全栈,工程和技术,两码事
aivier
2016-08-09 10:35:27 +08:00
后端套完 HTML 那结构...经常会元素满屏飞,更不用说修修 Bug 让后端更新下还要看后端脸色了,也许这是分离最大的好处

至于 React 呢...总比要独立一个模块的时候去 HTML 里扒一点代码,再去 JS 里扒一点代码,还要调一下看看 jQuery 为什么静默失败了要好得多吧?
见过很多次喜欢用 jQuery 的人写出来 $(this).parent().parent().parent().parent().parent().children('xx').find('xx') 这样的代码了,如果他能学得会 React ,至少是能理解一些的话,应该也不会写出来这样的代码了
yeqiu
2016-08-09 10:38:11 +08:00
服务器做服务器的事情(主要优化数据的处理)
web 做 web 的事情(通用便捷的 web 应用,炫酷的宣传页面)
app 做 app 的事情

这也可以反对?
firefox12
2016-08-09 10:40:32 +08:00
因为后端比你想象的复杂,前端也比我们想象的复杂。让后端人员再去学习 css js 的东西,虽然能写点小的 css 和 js,如果水平不够,也做不好 我的水平还停留在 jquery 操作操作 dom 的水平,前端讲的 js 框架对我有如天书。前端想了解后端的的业务其实也很难。 你在阿里做过, 你知道阿里搜索的流程吗? 知道阿里云存储的架构吗?知道 支付宝的数据库和业务架构 分区规则吗?

所以分开只是无奈。
Ixizi
2016-08-09 10:45:55 +08:00
前后端分离可能是受到了 安卓, iOS 的客户端冲击吧。

后端更注重于各个端的数据处理,前端则安心做界面。
yishenggudou
2016-08-09 10:46:23 +08:00
再加 沟通
1 个 前端 + 一个后端 <<<<<<<< 一个前后端一起玩的
yuankui
2016-08-09 10:46:47 +08:00
本故事纯属虚构,如有雷同,纯属巧合!😄
yuyang041060120
2016-08-09 10:48:21 +08:00
抛开业务场景谈技术都是耍流氓

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

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

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

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

© 2021 V2EX