小记前后端分离

	这是一篇笔记,文字摘抄自b站某up主,感兴趣可以了解一下。
															    ---我这里是自己做一个小记

场景:

谈谈你对前后端分离这件事的理解?
你觉得一个项目该如何实施前后端分离?

	前后端分离的开发模式,这两年确实被大家炒得如火如荼,导致这个话题也成了面试极其爱问的
	问题,尤其是换工作,跳槽,之前不管你是做前端还是做后台的,都有可能会涉及到这个问题。

你对前后端分离这件事有什么理解?或者说你觉得一个项目应该如何去实施前后端分离? 等等。

  • 很明显,这是一个开放性的问题,对吧,但是它却能考察出,你对这个技术关注点的层级,其实在回答这个问题的时候呢,尤其是程序员,他上来一谈到这个问题就钻到某项具体的技术或者说某个具体的框架中去了,比如什么Ajax异步请求,比如什么Vue.js这种组件化的开发框架,再比如什么Rest接口规范,还有什么API接口数据的约定等等,恕我直言,我觉得这很难成为面试官内心的答案,因为站在面试官的角度,这个问题,大家如果仅仅以某项具体的技术来切入,他会觉得,你对这个问题的认知其实很有限,理解是很局限的,因为很有可能,你只知道有前后端分离这么个事情,因为炒得很火,但是却不知道为什么要去做前后端分离这件事,尤其是很多培训班出来的小伙伴,很有可能只能谈到这个深度,就非常危险,而且还有一个就是社会上现在很多的公司,团队一个大的误区就是:为了做前后端分离而去做前后端分离

渊源:

  • 我觉得这件事情必须要从历史渊源来说起:在以前很长的一段时间里,在一个搞开发的公司里,其实后端开发工程师是比较有门面的。后端开发也是所谓的有技术含量的,往往也是项目和公司的核心团队,这导致现在很多应届生在求职的时候的一个误区就是:挤破头要去做后端开发,或者说自己自学的往往都是后端开发的内容,那个时候前端开发肯定也是有,但是直言不讳,那个时候的前端开发人员根本就没有什么话语权,可能只是一小撮人,散布在团队的各个小角落,甚至在很多团队里,前端开发其实都是后端开发工程师来兼任的,你回想一下,那个年代用的JSP技术不就是这个样子吗?我们就以JSP来举例哈,JSP就是一个典型的前,后端耦合在一起做的一个典型的技术案例,套个模板可以把大家套的死去活来,是吧,这种开发模式在以前那个互联网服务还不是那么繁荣,Web化趋势还不是那么明显的时代,发挥着巨大的作用,因为大家用得还算开心,毕竟页面不太复杂嘛,但是随着整个社会信息化程度的加深,还有各种各样的服务都Web化以后,其实很多前端展示的东西都变得非常的复杂起来,你去数数像淘宝这种网站有多少页面?是吧,你前端复杂了之后,像JSP这种套模板的技术,它没有办法高效的去开发,因为需求复杂了之后,原生的那些html,js,css的这种开发方式,包括什么jQuery等等这些技术点,在做复杂页面的时候就会变得非常的繁杂。
  • 其实本质原因呢,还是因为前端那个时候没有用工程化,模块化和可复用化的思维来做,因为那个时候的前端没有一个像后端Java开发,比如像Spring这样的工程化的开发框架,所以你想想,这时开发必然就会出现各种各样的不协调,还有一些效率低和扯皮的问题,所以从公司项目管理的角度来看这种开发模式就会非常的影响开发效率,所以项目管理者们就会开始想办法来解决这个问题,应该怎么解决呢?解耦呗!对吧,大家应该能够发现,在软件领域,在任何复杂问题的前面,高内聚,低耦合,这种原则几乎都能见效,所以前,后端的事情分开来做吧,我们要把前端开发的责任从后端开发工程师身上拿掉,我们要给前端开发工程师一个单独的岗位和责任领域,我们要给他们正名,我们不能让他们总是使用野生的开发模式,不能一天到晚去copy什么html代码段,js代码段,以及css样式,人肉的去试错,去调试等等,前端也需要工程化,项目化的思维来做,所以这才是前后端分离开发模式最开始的来源,所以那个时候你觉得关什么Vue.js,什么react等这种框架什么事情呢,对吧,他们充其量只是后来的一个具体实现的方式而已。

所以说来说去,从本质上来看,前后端分离,它本身并不是一个技术上的问题,而是一个工程化考量和项目管理的问题, 自此开始,前端开始独立出来了,那技术上的问题又怎么去解决呢?

  • 首先,前端不能像以前那样猥琐发育了,从这个地方开始,我们才开始讨论具体的技术,大家如果自学过前端开发的话,应该会有一种感觉:就是前端开发这玩意儿怎么这么琐碎,怎么这么玄学啊,是吧,它的东西非常的零碎,很多人,包括我自己,学习的时候都是东拼西凑,使用CV大法,面向复制粘贴编程,copy什么html代码段,copy什么js代码段,copy什么css样式,对吧,东拼西凑,东调试,西调试,调试完了就刷新,效果出来了就出来了,没出来就继续调试,反正就是靠往上堆积来试图完成你想要的页面和效果,你就会感觉这玩意它开发起来就是没有Java开发那么有逻辑,那么好管理,包括代码复用也是,前端开发可能很多人都是在收集代码片段,都是东拼西凑,复制粘贴来完成代码复用,但是后端开发它不一样,有各种各样的什么工具类,jar包,maven依赖,很明显后端开发有一种工程化的思维,可以满足长期演进和迭代的目标,但是前端那个时候却没有,所以像Vue.js,和React.js这些前端框架的出现,它们是从本质上颠覆了前端开发的游戏规则,我们叫它:前端开发组件化框架,但是我们更愿意叫它:前端开发工程化框架,因为自此开始,大家都遵循一套体系来进行约束性的开发,前端开发也越来越工程化,组件化,越来越有章可循,而且前端的代码也更好复用,是吧?
  • 自从有了诸如像Vue.js和React.js这种组件化开发框架的出现,你看人家写的各种各样的什么按钮,现成的按钮,现成的菜单,现成的布局,组件是吧,你拿过来用的不是挺爽的嘛,人家那什么饿了么的,什么蚂蚁金服的那一套UI组件,大家用的不是很爽嘛,这在以前哪里做得到是吧,而且随着Node的出现,前端开发也可以借助Node来开发各种各样的工具,来进行辅助开发,比如各种各样的什么包管理器,什么各种各样的预编译工具等等,这也是前端开发迈入工程化,迭代化,可复用化的一个很重要的方面。

那么前后端分离到底要如何去实施呢?或者说到底要怎么样去做才是一个比较优雅的前后端分离呢?

  • 一个正常的软件开发,简化来讲应该有四大步:设计开发测试部署,所以真正的前后端分离应该渗透到以上的每一个步骤中去,这才能算得上是真正的前后端分离。
  • 第一阶段,设计阶段:设计的第一个层面当然是系统设计,后端系统设计比较好理解,包括什么:后端架构,系统架构设计,数据库,中间件,缓存这些架构的设计是吧,主要是考虑性能,容量,扩展性,可维护性这些东西对吧。那么前端也应该如此,假如你的网站页面极其多,非常复杂,这时候前端项目架构也得做好充分的规划和准备,一定要满足一个长期可演进,可迭代的目标,这个其实在设计阶段也得考虑,当然设计的第二个层面就是所谓的接口设计,前后端分离之后,前后端系统通过接口进行交互,这个是肯定的,这个时候模型(Model)层面的接口约定极其重要,包括接口的请求方式啊,数据类型啊,还有一些数据的格式等等,这个东西我觉得一定要评审到位,不然在未来你开发写代码的过程中,你会发现前后端开发工程师永远在为某个破接口扯来扯去。
  • 第二阶段,当然就是所谓的开发阶段,开始写代码了,前后端各自按照事先约定的接口独立去开发,互相不需要扯皮,我觉得一旦前后端开发人员为了某个接口的事情出现扯皮,我觉得这个开发其实称不上严格独立的这种前后端开发,因为你想想看,总有一方要被迫的去改东西,去妥协,这其实还不是有耦合,对吧,前端现在在诸如:Vue,React等这些当下非常火热的组件化框架的帮助下,他确实可以独立的去驱动页面,独立的开发,数据也可以从事先规划好的,mock服务器去拿,数据全是模拟出来的,完全不需要依赖于实时的后端接口,而后端也只需要把你的接口写好,提供好,按照之前评审好的接口约定来提供数据就可以了,管你用什么Java的SpringBoot,还是什么PHP的后端框架,还是什么python的Django,flask,这些都跟前端没有半毛钱关系,互相透明,而且前端分离之后,后端一套接口可以提供给很多类型的前端使用,比如什么Web网页,比如手机的APP,再比如微信小程序,还有一些什么H5页面等等。
  • 第三阶段,就是测试阶段,基本上要保证的是前后端独立可测试,前端主要就是什么页面,跳转,展示,输入,还有一些什么传参,响应数据的展示,等等这些测试,后端则主要保证数据接口的提供,数据格式啊,校验啊,异常处理啊,数据的一致性问题啊,还有甚至一些权限的问题等等,所以这是测试。
  • 最后一个阶段,我觉得也特别关键,就是所谓的叫部署上线阶段,前后端分离之后,前后端项目独立可部署,我觉这个非常重要,是在以前JSP模板时代,前端html页面,css样式还有js效果,全是后台来驱动的,那个时候所谓的叫项目部署,就是发版本上线,其实指的也是后端项目的部署对吧,因为前端的东西是塞到后端项目里去一起做,一起部署上线,前端要改一个东西,发版本,你也得去求着后端来做是吧,但是前后端分离之后,事情就不一样,前端项目也可以自己去单独独立的部署,而且前后端发布上线可以完全独立,双方可以按照各自的版本规划来发版本,前端发版本不受后端约束,后端发版本前端也可以完全不知道,不管,就互相透明了,而且还有一个,我们知道很多公司里,后端项目可以通过类似Jenkins系统去做这种持续发布,一键部署,同理,前端项目也应该有自己的CI系统,也可以去持续发布,一键部署。
最后一个问题是:前后端分离确实是很适合复杂项目,反正看起来很好对吧,但是它就真的没有缺点了吗?这个问题就要回到刚开始我们所讨论的问题了,为什么会有前后端分离这件事情的出现,怕就怕很多公司为了前后端分离而去做前后端分离,吧啦吧啦说了这么多,大家应该看得出来,前后端分离是需要成本的,尤其是你想做一个彻彻底底的前后端分离,不管是你的人力成本啊,开发成本啊,工具成本啊,还是部署成本啊其实都是不小的,有些小团队或者说小项目,你如果不顾自己的实际需求,强行进行前后端分离式开发,只会给自己找麻烦,因为你只要前后端分离的某一个点做得不彻底,它就会带来非常多的负担,而不是便利性了,所以说并不是所有项目都适合做前后端分离,这个其实是要看实际性价比的,还是那句话:前后端分不分离它本身不是一个技术问题,而是一个工程考量的问题,其实具体的技术倒没有什么复杂,都是比较清晰的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值