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

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. 小公司别搞前后端分离,徒增复杂度!!!

128218 次点击
所在节点    JavaScript
562 条回复
murusu
2016-08-09 10:49:12 +08:00
同觉得楼主没吃透
估计楼主没碰到过前后端都很复杂的应用,比如说 oa 跟 erp 之类的
这类型的应用对功能可扩展性以及系统的可维护性都有很高的要求
如果按你所说一个人同时负责的前后端,那真是画美不看
cxyfreedom
2016-08-09 10:53:06 +08:00
前后端分离还是能够更加术业专攻吧。

另外,如果真的都是不分离搞成全栈,两个人变成一个人。从就业来看,一半的人就要失业了...
SpicyCat
2016-08-09 10:54:12 +08:00
前后端分离也不是绝对的,当然可以不分,因为这就不是个技术问题,而是个工程问题。有些团队认为前后分离,模块化容易开发容易维护,就分离喽。
icybee
2016-08-09 10:54:12 +08:00
React 和 Gulp 是用来装逼的。。。楼主最后得出了这个结论。。。大公司的后端很多都复杂到死。。。叫后端分担前端工作真不好。。。而且前端也越来越复杂,早不是后端能把控住的了。。。分工的细化是社会发展的必然结果,何必逆水行舟。。。
bdbai
2016-08-09 10:58:23 +08:00
等把应用做成 oa 和 erp 的规模时再分已经晚了。
后端不是白干的,数据也不是戏法变出来的。楼主总是站在前端的角度上,自以为做了后端的活导致后端没事干,才会有这样的想法吧。希望楼主继续深入学习后端知识,并用于实践,然后再来看“让后端变成全栈”这样的问题。
learnshare
2016-08-09 10:58:28 +08:00
分业务的, blog/news 这类以展示为主的页面,左前后端分离略浪费。

但各种后台管理系统,不分离不行。
FrankFang128
2016-08-09 11:04:20 +08:00
@icybee 你们后端复杂到死是因为服务封装得有问题。
RaymondYip
2016-08-09 11:04:34 +08:00
这个得看你的项目是做啥啊, 公司主页啥的 静态页 怎么弄没所谓.
那些多交互的页面, 编辑器之类的, 不分离你试试.
以前写 asp, php, jsp 前后端不分离那是各种恶心好嘛
现在分离了挺好的
FrankFang128
2016-08-09 11:05:56 +08:00
@SpicyCat 如果一个团队只有 2 个后端,有 10 个前端,那么搞前后分离我没意见,把工作量分到前端嘛。
但是如果 10 个后端, 2 个前端,还搞前后分离,就呵呵了。要把两个前端累死。
FrankFang128
2016-08-09 11:06:59 +08:00
@RaymondYip 没有那么多在线编辑器要做。分离对开发者好(工作变少了嘛,谁不爱),但是对团队不好(分成两部分)
FrankFang128
2016-08-09 11:08:06 +08:00
@murusu 你拿 OA 和 ERP 举例就抬杠了。这是典型的富交互单页面应用啊。不分离怎么弄。
wph95
2016-08-09 11:09:45 +08:00
全栈工程师 固然好,
你能找到几个? -。-
FrankFang128
2016-08-09 11:11:01 +08:00
@icybee
前端是不复杂,被搞复杂。
后端是复杂,但可以封装成服务。

腾讯和阿里的所有数据接口都是封装后再给后端用的,只要封装得没坑,调用方不会感觉很复杂。
pi1ot
2016-08-09 11:11:49 +08:00
你的观点太长了我没仔细看,不过你推测的前后端分工演化过程是错误的,基本上这个流程也是分为三步

1 、 2000 年之前到差不多 03 、 04 年前后,没有前端这个岗位,页面上的简单校验脚本都是可有可无的,代码基本上是这样
printf( "<html>%s</html>", content );

2 、 04 、 05 年左右开始后端开始普遍模版化,这时候仍然没有专职的前端,不过程序员拿到手里的都是切好的 html 页面和 css 文件,可以理解成页面工程师兼职了部分前端职责,代码是:
templet.set( "{%content%}", conent )
templet.output()

3 、从 05 年 AJAX 开始流程到再过几年 JSON 成为事实格式标准后,大约 07 、 08 年或者更早,才演变成了现在这样后端只输出 json ,前端负责所有展现端职责的分工

总体来是一个细化分工的趋势,业务逻辑相对稳定,展现逻辑和展现平台更加多变,两者解耦更有利
即使在第一阶段的大型项目中,也是有类似的模块分层的
nigelvon
2016-08-09 11:13:04 +08:00
前后端分离大势所趋,没人是傻子。
CTO
2016-08-09 11:13:09 +08:00
术业有专攻 广而不深 吃枣药丸
FrankFang128
2016-08-09 11:14:14 +08:00
@bdbai 同楼上,如果你们的后台重,说明没有封装好服务。后端不会 W3C 好意思吗?
一个页面渲染所需的数据,很多时候不仅仅来源于一个 API 。这种问题,跟分离不分离没关系。
FrankFang128
2016-08-09 11:14:40 +08:00
@CTO 话太空洞,不好讨论。
FrankFang128
2016-08-09 11:14:57 +08:00
@nigelvon 话太空洞,不讨论。
zenliver
2016-08-09 11:15:03 +08:00
除了平台架构, 其他都是前端, 什么分离不分离

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

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

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

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

© 2021 V2EX