前言
首先,前后端分离不是一个新的话题,也没有什么大的争议,在目前主流的开发领域,基本上已经成为业内的规则。这里就是简单聊一下,我们在哪些情况下,应该规避前后分离的固有思维,把目光聚焦在具体业务上面,防止出现经验主义,带来一些不必要的人力和资源上的浪费。
发展
单从我的角度来说,由于从业时间比较早,应该是经历了完整的一个变迁过程。从JSP到freemarker模板引擎,再到angularjs,Vue、reactJs前端框架。
- 早期阶段的JSP结构,所有的前端页面都是由servlet实时渲染的,基本上一个程序员就能完成所有的业务功能,在这个阶段基本上没有区分前后端开发者。
- 到了模板引擎时期,我才开始接触到前端程序员,不过这个阶段的前端,主要是编写CSS和html的展示效果,将产出的html文件交给后端开发之后,前端的工作就完成了。至于用户交互、各种表单提示和数据持久化,则由后端处理;相比上个阶段,前后分离的趋势日益明显。
- 发展到如今,前后端分离的模式,在我看来已是步入爆发期,抛开后端的微服务、中台、RPA等各种概念不谈,前端的各种框架、设计模式和引擎迭代层出不穷,很多公司已经成立大前端部门,负责多端开发,进行横向分层,前端在技术团队中扮演的角色愈发突出。
不要盲信
前后分离,当下已经成为一个主流,而且从开发效率、用户体验等方面来说,其带来的好处是显而易见的,但是我们也没有必要一味的追求这种模式。
- 首先,从现实情况看,一些内部服务,比如管理后台、OA系统、IT采购服务等,用户和业务都比较固定,在我看来,更加适合用前后统一的方式来完成,出现问题也能快速找到负责人。如果采用前后分离的模型,由前端整合多个微服务的API,反而会造成系统碎片化,导致权责边界模糊,问题的暴露也更加滞后;
- 其次,处于历史原因,当前应该有一批相当规模的老系统采用的是前后统一的模式,对于这样的系统来说,除非是有特殊规划,否则还是不要轻举妄动。
- 最后,前后虽然分离,但是依赖任然存在,而且增加了系统集成和开发人员之间的沟通成本;在代码质量层面,也更加依赖开发者的自我约束。
小纪
对于后端来说,是否可以彻底放弃JSP/Servlet那一套了?我觉得为时过早,当前web服务大体上还是基于MVC框架,而mvc的底层是什么呢,还是servlet。后端开发者增加一些底层细节的知识,对于调查异常问题来说,还是很有帮助的。