前言:分离模式

  对前后端分离研究了一段时间,恰逢公司有一个大项目决定尝试使用前后端分离模式进行,便参与其中。该项目从2016年初立项至今,平平稳稳得度过,但也涌现出越来越多的问题,绝对不是说前后端分离模式不好,而是很多公司在尝试前后端分离的时候没有做好充分得准备。

  网上对前后端分离介绍的文章已经屡见不鲜,接下来本人用一点粗浅的言语也谈谈这块,献丑了。

 为什么要分离?

  如果只问“前后端分离的意义大么?”这是废话,因为从软件架构的角度 Web 的前后端从一开始不就一直是分离的么,而且 browser、server 可能将永远分离下去。

  为了了解这个问题,我们有必要先了解一下 Web的研发模式演变,关于这个题材,下面这篇博文说得不错,这边就不做搬运工了。

  https://github.com/lifesinger/blog/issues/184

  我们不能“为了分离而分离”,而应该“为了真正理解web开发、为了更好完成需求而分离”。

 前后端分离的误区?

  1、前端人员配备是否充足?

  由于所在公司以往项目采用传统开发风格,即以后端MVC为主的开发模式,前端人员仅仅提供静态html页面,其余工作皆由后端开发人员完成。采用前后端分离模式可以减后台负担,加快研发效率,当然,前提是前端能做好的话。以往只需要提供静态页面的前端人员,在前后端分离模式中要负责项目的view+controller部分,即除了静态页面,还需要负责页面的所有交互代码、以及nodejs与视图层以及后端API的交互工作,无疑增加了前端人员的学习成本,在没有足够知识和人才储备的情况下,只能让前端人员加班加点。结果是大量前端人员离职(PS:做这么多事,工资总得加吧!)

  2、前后端职责分配?

  很多公司认为采用前后端分离之后,前后端只需要通过指定API进行交互即可,前端负责页面渲染,Nodejs负责路由分配,后端提供API。忽视了大量关键工作,职责分配和细节处理没有相应文档规定,缓存机制、图片上传下载、数据校验、语言国际化等等并没有出具相应信息。另外,大量忽视了nodejs层的作用,仅仅把nodejs当成一个路由中转,这一方面也是对nodejs技术的不熟悉导致的,其实nodejs能负责很多事,除了复杂业务逻辑处理和数据操作由Java 负责,大量工作完全可以在nodejs层处理。(PS:还是基础不够导致的!)

  3、后端API是否Restful风格?

  很多公司采用了前后端分离模式后,后端API仍然采用以往的传统风格,这是不合理的,Restful风格的API应该是前后端分离的最佳实践。ResultFul推荐每个URL能操作具体的资源,而且能准确描述服务器对资源的处理动作,通常服务器对资源支持get/post/put/delete/等,用来实现资源的增删改查。前后端分离的话,这些api-url是对接的桥梁,采用resultFul接口地址含义才更清晰、见名知意。(PS:用了Spring4.x 竟然还不用rest风格,说不过去啊)

  4、前后端协作模式?

  前后端分离后,无论是API接口的对接还是测试工作,都涉及到前后端人员的沟通,很多公司采用前后端分离后,前后端协作模式配合力度底,互相等待,开发效率低下,反而不如传统的开发模式。例如:当后端 API 没有编写完成时,前端无法进行调试,这就导致了前端会被后端阻塞的情况。其实像这种互相等待的模式需要改进, Mock Server 可能可以解决一些问题。

 如何前后端分离?

  怎么做前后端分离?大方向就是

  后端专注于:后端控制层(Restful API) & 服务层 & 数据访问层;

  前端专注于:前端控制层(Nodejs) & 视图层

  本人认为的前后端分离模式应该是这样,当然这不一定正确:

  1、项目设计阶段,前后端架构负责人将项目整体进行分析,讨论并确定API风格、职责分配、开发协助模式,确定人员配备;设计确定后,前后端人员共同制定开发接口。

  2、项目开发阶段,前后端分离是各自分工,协同敏捷开发,后端提供Restful API,并给出详细文档说明,前端人员进行页面渲染前台的任务是发送API请(GET,PUT,POST,DELETE等)获取数据(json,xml)后渲染页面。

  3、项目测试阶段,API完成之前,前端人员会使用mock server进行模拟测试,后端人员采用junit进行API单元测试,不用互相等待;API完成之后,前后端再对接测试一下就可以了,当然并不是所有的接口都可以提前定义,有一些是在开发过程中进行调整的。

  4、项目部署阶段,利用nginx 做反向代理,即Java + nodejs + nginx 方式进行。

 编后语

  从经典的JSP+Servlet+JavaBean的MVC时代,到SSM(Spring + SpringMVC + Mybatis)和SSH(Spring + Struts + Hibernate)的Java 框架时代,再到前端框架(KnockoutJS、AngularJS、vueJS、ReactJS)为主的MV*时代,然后是Nodejs引领的全栈时代,技术和架构一直都在进步。虽然“基于NodeJS的全栈式开发”模式很让人兴奋,但是把基于Node的全栈开发变成一个稳定,让大家都能接受的东西还有很多路要走。创新之路不会止步,无论是前后端分离模式还是其他模式,都是为了更方便得解决需求,但它们都只是一个“中转站”。

  走过的“中转站”可能越来越多,但是不要渐行渐远才是。

  via:http://www.cnblogs.com/shanrengo/p/6397734.html

欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群

浅谈架构之路:前后端分离模式相关推荐

  1. JAVA电子病历系统源码,云端SaaS服务 前后端分离模式开发和部署

    电子病历系统是什么? 电子病历是指医务人员在医疗活动过程中,使用医疗机构信息系统生成的文字.符号.图表.图形.数据.影像等数字化信息,并能实现存储.管理.传输和重现的医疗记录,是病历的一种记录形式. ...

  2. 《浅谈架构之路:前后端分离模式》 - 山人行 - 博客园

    前言:分离模式 对前后端分离研究了一段时间,恰逢公司有一个大项目决定尝试使用前后端分离模式进行,便参与其中.该项目从2016年初立项至今,平平稳稳得度过,但也涌现出越来越多的问题,绝对不是说前后端分离 ...

  3. 《浅谈架构之路:前后端分离模式》

    前言:分离模式 对前后端分离研究了一段时间,恰逢公司有一个大项目决定尝试使用前后端分离模式进行,便参与其中.该项目从2016年初立项至今,平平稳稳得度过,但也涌现出越来越多的问题,绝对不是说前后端分离 ...

  4. 浅论前后端分离模式:低代码强势推动开发效率提升

    编者按:本文介绍前后端分离,以及低代码如何采用前后端分离等先进技术为软件开发赋能提效,提高用户开发体验. 如何理解分离前后端? 前后端分离,其实就是将一个单体应用拆分成两个独立的应用,只通过简单的AP ...

  5. 前后端分离模式下的权限设计方案

    前后端分离模式下,所有的交互场景都变成了数据,传统业务系统中的权限控制方案在前端已经不再适用,因此引发了我对权限的重新思考与设计. 权限控制到底控制的是什么? 在理解权限控制之前,需要明白两个概念:资 ...

  6. vue后端必须接口吗_前后端分离模式,后端说开发完才能给接口文档,合理吗

    背景: 汇总了下老王在其他平台的原创回复,欢迎关注老王原创公众号[软件老王],关注不迷路. 一.后端开发完接口才给出接口文档,合理吗? 本人所在的项目组做项目过程中,后端不会先给出接口文档,而是要等他 ...

  7. 前后端分离模式开发的BS电子病历编辑器源码(Java)

    电子病历系统,是医学专用系统.医院通过电子病历以电子化方式记录患者就诊的信息,包括:首页.病程记录.检查检验结果.医嘱.手术记录.护理记录等等,其中既有结构化信息,也有非结构化的自由文本,还有图形图象 ...

  8. 前后端分离模式开发总结

    前后端分离介绍及优势分析 前后端分离的核心思想是前端 HTML 页面通过 ajax 调用后端的 RESTful API 接口并使用 json 格式进行数据交互.前后端除了数据的传输外,没有太多的联系, ...

  9. 【sprintboot+vue】前后端分离模式下的登录验证码验证

    [项目背景] 考虑登录时的验证安全,需要添加验证码验证,纯前端实现的验证码其实没有真正意义上做到安全验证的要求,简单一个网页爬虫就能获取到前端生成的验证码,所以应该由后台生成验证码,并由后台完成校验过 ...

  10. 前后端分离模式下前端与后端数据交互

    下面举的例子就是使用jQuery Ajax和Python Flask进行前后端交互时,前端提交表单数据到后端,后端返回JSON数据给前端. 前端GET提交表单数据: # GET请求var data = ...

最新文章

  1. 电脑用久了,学会这几招增加十年寿命,清除电脑里的垃圾方法与流氓软件工具
  2. 【Android】SlidingMenu属性详解
  3. 测试必备:单元测试测试类,以帮助匿名管理调查的类为例详解--白盒测试
  4. 解题报告: LeetCode Max Points on a Line
  5. docker 容器命令
  6. WIN7系统一个盘分多个盘的方法
  7. 第九讲 自定义函数参数预定义
  8. Sqlmap脱库之“你的数据我所见”
  9. x550网卡linux驱动,Intel英特尔X520/X540/X550系列网卡驱动24.3版For Win8.1/10(2019年11月4日发布)...
  10. C-Lodop使用及常见错误排查
  11. mac无法验证您网络上的打印机,怎么解决?
  12. 关于ele框架样式修改
  13. 电脑蓝屏显示(你的电脑遇到问题,需要重新启动,你可以重新启动)
  14. 项目开发中的人月及如何计算
  15. mapgis明码文件转为点线面文件_Geomap格式转化.doc
  16. 1647120-04-4,c(Bua-Cpa-Thi-Val-Asn-Cys)-Pro-d-Arg-NEt2 acetate多肽
  17. android 傻瓜式编程,傻瓜式App开发:jimu 像搭积木一样搭建Android App
  18. c语言之奇偶数分开排序
  19. 老照片怎么修复?模糊照片如何变清晰?试试这些方法
  20. 安装一个apk引起的无法开机。

热门文章

  1. iOS - Analyze 静态分析
  2. mysql 忘记密码解决方法(有用)
  3. 外贸网站SEO优化要共享IP还是独立IP
  4. 程序员的一种境界【转的】
  5. hdu 4308 Saving Princess claire_ 广搜 多校联合赛第七题
  6. LUT Utility for FCPX(Luts调色文件加载工具)
  7. Typora for Mac(文本编辑器)
  8. 解压软件Bandizip Archiver for mac
  9. 苹果Mac如何限制进程 CPU 资源占用?
  10. 如何清洁和消毒Mac笔记本电脑?