真正接触先后端分离模式也就几个月的时间。本文属于本身对先后端分离模式的一些总结,主要来源于针对以前的后端作数据渲染与分离模式的一些对比。近期会针对一些常见的开发模式作一些分享,若是对你有帮助,给个关注吧!!!html
先后端分离从端口划分就是将浏览器、客户端分为前端,提供真实服务的软件就成为后端。从开发语言的角度划分后端的编程语言和前端的编程语言,例如Java是作后端真实数据服务的,JavaScript、HTML是作前端业务数据的展示与用户行为操做的。前端
A.为何会出现前端和后端分离模式,这得从有先后端分离开发模式以前的开发模式提及。咱们先看下面两张图。ajax
第一张图是非先后端分离。数据库
1.首先,咱们经过图片能够看出,一个项目的开始从产品经理,其次是设计工程师,其次是前端开发工程师......最后才是运维工程师进行项目部署。这样一个项目才算的上真正的开发完成了。编程
2.这样的开发模式全程是一个串行的模式,从外观就有点像一条龙服务的模式,后者依赖于前者。用编程中的一个词语就是,高藕和。3.后端
第二张图是先后端分离。设计模式
1.首先,咱们经过这张图片能够看出,一个项目的开始一样是从产品经理,接着就是设计工程师负责。跨域
2.最重要的一点,咱们看设计工程师在负责的同时,后端工程师和前端工程师都在一样的进行开发,这样三者是处于并行进行。浏览器
3.而后设计工程师设计完以后,交付给前端工程师,后端开发工程师完成以后能够和前端工程师作对接。前端工程师
4.这三者完成以后,接下来就是测试工程师,最后一样的是运维工程师负责。这样一个项目才算的上真正的开发完成了。
5.经过这种模式,咱们不难看出,在产品经理完成以后,再也不是单独的设计工程师完成以后交给前端工程师,而后在交给后端工程师,而是三者能够处于并行的一个状态。
B.上面谈完了,咱们接下来分析总结一下非先后端分离模式的缺点。
1.开发效率低。
经过上面的图一,咱们看的出每个环节都依赖进行,不免延长了开发周期。
2.整个团队的协做耦合度高。
环节层层依赖。若是某个环境进行了修改,其余的环境就得收到影响。
3.团队容易甩锅。
当项目出现问题以后,团队成员很容易将一些责任推到其余的环节上面。
4.难以处理愈来愈复杂的业务。
随着现目前的业务发展趋势,业务也愈来愈复杂。例如,一些页面交互效果,数据处理。传统的模式很难支持这样的业务场景。经过先后端分离,前端负责对应的交互业务,后端负责数据的处理。
5.使得代码的耦合度更高。
这里能够从一种软件设计模式来分析。那就是MVC模式,模型层(M)负责数据库层面的操做,控制层(C)负责处理逻辑,视图层(V)负责数据渲染。这是一种很不错的软件设计模式。但在不作到严格规范的状况下,仍有不少的程序开发者,在控制层C输出一些视图层V的业务代码,这样的代码似的代码的耦合度更高,同时也难以维护。
综上B点弊端,咱们不难分析出先后端分离的一些好处了。
1.提升开发效率。
2.下降的软件设计的耦合度。不论是前端仍是后端,均可以针对不一样的端,实现一些工程化的东西。
3.提升了处理复杂业务的能力。后端能够只专一后端业务,前端能够专一于前端的业务。
1.团队沟通成本。
每一个环节都须要保证沟通、协商好,不然很容易致使团队混乱,所以先后端分离模式对团队协调也是有着较高的要求。
2.不利于搜索引擎抓取。
由于搜索引擎看的是html源码,不能执行js,也就没法获取js动态从ajax抓的内容。
3.项目维护成本。
先后端分离,后端的代码和前端的代码都须要单独部署。在开发中也须要针对开发需求部署不一样的环境。
4.增长繁杂的配置。
先后端分离,须要设置跨域一系列的其余操做。同时也会针对先后端的一些监控处理。都无疑增长了工做量。
所谓的先后端并非单纯的指前端工程师负责的内容和后端工程师负责的内容之间能够独立进行。整体概括以下几点:
1.产品设计
2.设计
3.前端开发
4.后端开发
5.测试
6.部署
这几个环节,其实不少均可以并行运行。
1.例如,在产品设计好以后,可以具体肯定哪些功能,先后端工程师能够协商接口、接口参数等须要对接的内容,设计师能够同时负责设计。
2.当定义好了项目的一些规范,先后端的开发人员在开发的过程当中,可能会须要一些模拟数据,这时候后端开发人员并未开发出对应的接口,那怎么办呢?就能够事先使用mock模拟一些数据,供前端人员调用,后端人员开发完成以后,前端直接调用真实数据。
3.在先后端开发过程当中,测试人员能够针对前端人员开发的功能进行前端调试,例如UI还原、用户交互缺陷等。测试人员也能够针对后端开发人员的接口进行数据调试。
4.最后运维工程师在前端和后端工程师开发过程当中,能够针对前端的环境进行一些列的搭建,也能够针对后端的环境进行一系列的搭建。待项目开发、测试完成就直接部署,而不是等到开发、测试完成以后才来从0开始部署。
本文可转载,需注明出处(公号:卡二条的技术圈)