程序员该如何正确理解前后端分离?

曾嘟嘟


前后端分离的演变

记得12年从事工作的时候公司还没有专门的前端人员,一般我们都是前后端都会,毕竟那时候H5才刚刚起来微软的XP还在流行使用(默认系统自带IE6),IE的市场份额还是蛮大的。做的产品也没有很炫酷的特效(如果有也会选择使用flex),那时候Flash 是超级火的......扯得有点远了。

在开发的时候也是一边API接口服务,一边开发页面,发布也是一个发布包搞定。前端一般只是负责切图工作,就是将UI设计师的设计图布局成静态页面,前端是不参与交互逻辑和业务开发的,前端也是当时统一的吐槽对象。当时淘宝的Web架构比较流行基本上都是基于MVC框架webx,所以前端写好静态html 然后后端开发人员翻译成vm模板.....

这样就导致了前后端工作的分配不均,开发效率慢,代码维护量也大。为了解决痛点 慢慢开始前后端分离的架构流行开来 很好的解决了前后端分工不均问题,将更多的交互逻辑分配给前端来处理,而后端则可以专注于其本职工作。例如后台开发可以有跟多的时间进行后台权限控制以及复杂的运算工作,前后台解耦 ,两者同时开始推进项目进度,增加开发效率。

如何进行前后端分离

最开始的时候是SPA式的前后端分离法,单纯的从物理层做区分(认为只要是客户端的就是前端,服务器端的就是后端),这种分法不能满足前后端分离的需求,认为从技术职责上划分才能满足目前我们的使用场景,作者在工作中使用过两种方案:

第一种:

前端:负责View和Controller层。

后端:只负责Model层,业务处理/数据等。

优点:可以做url design,我们可以根据场景决定在服务端同步渲染,还是根据view层数据输出json数据,我们还可以根据表现层需求很容易的做Bigpipe,Comet,Socket等等,完全是需求决定使用方式。

缺点:需要前端来写Controller,以Java语言开发为例,需要前端学会Java开发,这样在处理复杂的业务逻辑的产品里双方都有Java 代码方面的重叠。

第二种:

前端:负责View层。

后端:负责和Controller、Model层和业务处理/数据等。

优点:前端不需要学习后台开发语言,只需要调用API服务就好,前后端代码分别统一管理起来 形成自己的对接规范。这样前端可以和不同的后台语言做对接服务。

RESTful Api和Json搭建前后台交互

备注:现在公司使用的RESTful 架构,后台提供一组设计原则和约束条件。

RESTful 主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

RESTful Api和Json 技术的使用让前后端交互日益便利

前后端分离以后就存在数据交互的问题,如何快速、简洁、有效和统一的在前后台进行信息的交互,成为分离以后必须考虑的问题。

幸运的是, RESTful思想和Json数据标准的出现,使得这种交互日益便利,在前端,我们耳熟能详的JS技术和框架对RESTful和Json的支持可以说已经水到渠成. 至于后端,不管什么语言,什么平台都有非常成熟的方案.

前后端的不同发展趋势使得前后端分离需求日益明显.

渐进式框架Vue.js

Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

备注:先介绍到这里,有不同的想法可以下方留言一起讨论。

总结:众所周知,Web开发自出现以来一直存在性能,表现和体验的先天不足,但时至今日,事实已经并非如此,一些看上去甚至比桌面程序更炫的应用和网站横空出世,客户也被吊足了胃口。Web开发桌面化已经是无法阻挡的潮流,而前端开发的需求应该会向更加注重界面表现,速度流畅,用户体验的方向发展,而且要求只会越来越高。

而在后端稳定、性能、安全、存储和业务等核心问题依然是主流,所以前后端的需求必将日益分化,注重表现和注重内在的前后端开发人员必将需要适合自己的舞台。

更多精彩内容请关注“IT实战联盟”哦~~~






IT实战联盟


我喜欢这样的问题。

如果是问“什么是正确的前后端分离”,我还真不敢回答,生怕自己的理解有什么偏差;但是问怎么“理解前后端分离”,那我可以结合自身的工作,谈谈我对前后端分离的理解,也欢迎大家提出不同的理解。


  • 我07年参加工作就是做企业级项目的开发,那时候的一些项目都只有一个包,没有什么代码规范,业务逻辑散落在各处,甚至是JSP中直接访问数据库并做业务处理。

  • 后来逐渐有了一些规范,页面就是页面,代码就是代码,很多项目开始使用Ajax框架。

  • 发展的更进一步,后端代码有了分层,cotroller/service/dao,可能每个项目分层策略不同(三层和两层居多),每层的叫法不同(cotroller还是action),数据从页面到最后访问数据库,需要走到多个分层中。


  • 不过到了此阶段,在企业级项目的开发过程中,Java程序员依然要兼顾前后端的开发,所以前端页面的样子嘛,达不到美观的程度,也就是能用。

继续发展,很多项目开始变成了前后端分离。对于前后端分离的定义我是这样理解的:

  • 页面是页面,代码是代码,但是他们在一个包中,这个肯定不能算前后端分离;

  • 前端页面一个程序包,后台代码一个程序包,两个包都需要部署到Tomcat上,前端调用后台的接口;我认为这个也不是严格的前后端分离,但是我觉的这样做也没有问题;

  • 如果前端只有HTML文件,放到HTTP服务器上,浏览器只访问获取这些HTML就好了,数据是从后台程序提供的接口获得;这样才算是前后端就分离了。

  • 前后端分离有很多的好处:前端开发和后端开发可以各司其职,约定好接口之后就可以并行开发;后端接口可以复用,如果项目同时有电脑网页端、移动网页端、APP端等多个入口的时候,后端可以只有一个;

  • 带来好处的同时,也会有一些缺点,例如:增加了架构的复杂性,如果技术能力不足的团队,可以考虑半分离(例如我们部门都是企业级应用,都没有前端开发人员);如果是面向互联网的应用,需要搜索引擎抓取,就需要服务器端渲染;另外前后端交互的接口,也需要花时间和精力设计。

  • 最后,是否需要使用前后端分离,还需要根据项目的实际情况决定。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。


会点代码的大叔


我刚开始做开发的时候目标就是做一个全栈工程师,啥是全栈工程师呢?就是前端,后端,数据库,运维等样样精通,

不管是一开始的HTML代码直接写在JAVA代码里,还是后来的MVC框架,把业务层和显示层分开,页面的代码和后端业务功能全部耦合在一个项目里边,开发人员不仅要处理业务方面的逻辑,还需要控制页面的展示,甚至于页面颜色等等非业务方面的交互东西!



最主要的是如果只是页面需要改变个简单的样式,还得把整个应用全部部署一遍,这显然是极不合理的!

所以前后端的分离极有必要,让前端来控制与用户的交互,而后端来实现业务罗,虽然对外作为一个整体,但是前端和后端分别部署,让前端开发人员和后端开发人员能做自己更加擅长的东西!


前后端的分离通常使用后端服务系统提供接口与前端进行数据交互,前端负责显示和接受用户数据,现在用的最多的前后端分离方案是后端微服务+node.js(互联网大厂都这么用)!

node.js将js代码不像是在浏览器一样解释执行,而是放在了服务端进行环境部署执行,同时node.js使用事件驱动,非阻塞IO的方式能同时支持大量的访问!

前后端分离之后,就存在跨域(域名不同,协议不同等等)的问题,解决的方式比较多,有nginx配置转发,CORS配置响应头等等!


总之,前后端分离就是为了解放前后端的开发人员,让开发人员能更加专一的进行擅长的工作,前端负责交互,后端负责业务处理,最终形成一个整体的应用系统!

以后全栈工程师这个词只怕是会越来越远咯!


哎哟JAVA不错哦


Java程序员前来分享这个问题。

前后端分离最直观的理解就是前端程序员干前端的活,后端程序员干后端的活。



详细点说就是由于架构和技术选型,前端和后端高度解耦合,数据传输保持一致,代码互不相干,后端复杂增删改查的业务操作,最后会有产出一堆数据,一般是json格式,如果通过具备一定规范和约定的接口,流向前端程序。



这个地方有点像插座和插头的关系,数据像电流,前端提供一个插座板,后端提供一个插头,数据就开始连接了起来。

至于前后分离的原理这里不做过多阐述,说说以前前后不分离的时候,后端开发人员可能还要改jsp代码,硬生生被逼成了一个“全栈”。如今前后分离,后端开发者只需要关注后端代码怎么写,最后统一接口传输就可以了。



不过目前有个尴尬的地方,前后端即使分开写,还是要进行联调的工作,这就让系统解耦合度工作人员没有解耦合。

关注“极客宇文氏”,一名有料的软件工程师。

极客宇文氏


程序编写的前后端分离有很多好处,既能带来开发效率的提升,也能带来执行效率的提升,另外对程序的部署、安全性都会有一定的帮助,所以前后端分离一直是Web开发领域一个很重要的内容。

随着Web开发技术的不断发展,前后端分离从设计到技术都有了较大的变化。早期Web开发基本上采用的是一种耦合式开发,也就是说前端技术和业务逻辑是耦合在一起的,典型的代表就是JSP+JavaBean的开发方式,如图:

后来提出了MVC的解决方案,JSP专注于显示,业务逻辑采用Servlet+JavaBean来完成,这种开发方式流行了很长一段时间,经历了从EJB到Struts再到Spring,一直到Ajax技术的出现,如图:

再后来提出了HTML+JavaScript的前端解决方案,后端采用微服务的方式来实现,这样做的好处是前后端彻底分离了,前端页面也不再与后端服务部署在同一个服务器中了,而是采用了分开部署的方式。这种部署方式增强了Web应用的健壮性和稳定性,也极大的提升了访问效率,比如目前前端页面大部分都部署在Nginx服务器上。

对于程序员来说,理解前后端分离的开发方式要能通过代码实现出来,不仅要对开发技术有所了解,更应该知道每个技术的应用场景和性能特点。前后端的分离也能带来开发效率的提升,前端团队可以更专注于呈现的效果,而后端开发团队可以更关注于处理的效率。

我做Web开发时间比较久,我会陆续在头条写一些关于软件开发方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。

如果有软件开发方面的问题,也可以咨询我。

谢谢!


IT人刘俊明


以java为例。简单的理解为。javaweb不再提供试图。只提供restful格式的api接口。前端框架负责交互和渲染视图。以api为数据交换中心


killman


程序员不需要了解,设计师不需要了解,架构师不需要了解。因为该知道的都知道了,不知道的也不需要知道。

老板需要了解、CTO需要了解。前后端分离应该是从上而下的战略决定,而不是从技术到技术的业务决定。

前后端分离绝对不仅仅是一个技术问题,更是一个综合性规划和管理问题。

1、公司规划和产品规划层面

产品的用户体验对公司很重要,这种情况下前后端分离才很重要,因为这意味着会有更专业的前端开发人员开发前端。所以一般来说ToC的公司前后端应该分离,而ToB要考虑这个问题。

2、人员和组织结构层面

最好有更专业的美工,这很重要,否则这会是用户体验的短板,花钱请个美术专业的美工,比请个很牛逼的前端划得来的多。前后端要分开管理,否则领导的技术经验带来的思维定势会很大的影响很多技术决策。人员成本也是需要考虑的,现在前端的工资虚高。

3、技术层面

这里的重点是前后端结合部分的技术考量。到底是前端为主型还是后端为主型。这就不展开了,一言难尽。




正宗乌龟鱼


1、该网站前端变化远比后端变化频繁,则意义大。

2、该网站尚处于原始开发模式,数据逻辑与表现逻辑混杂不清,则意义大。

3、该网站前端团队和后端团队分属两个领导班子,技能点差异很大,则意义大。

4、该网站前端效果绚丽/跨设备兼容要求高,则意义大。


分享到:


相關文章: