先后端分离框架

原文转自 http://www.javashuo.com/article/p-ekuaazjk-ey.htmlhtml

前言:分离模式

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

  网上对先后端分离介绍的文章已经家常便饭,接下来本人用一点粗浅的言语也谈谈这块,献丑了。vue

为何要分离?

  若是只问“先后端分离的意义大么?”这是废话,由于从软件架构的角度 Web 的先后端从一开始不就一直是分离的么,并且 browser、server 可能将永远分离下去。node

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

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

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

先后端分离的误区?

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

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

  二、先后端职责分配?

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

  三、后端API是否Restful风格?

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

   四、先后端协做模式?

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

如何先后端分离?

  怎么作先后端分离?大方向就是

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

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

  本人认为的先后端分离模式应该是这样,固然这不必定正确:

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

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

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

  四、项目部署阶段,利用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的全栈开发变成一个稳定,让你们都能接受的东西还有不少路要走。创新之路不会止步,不管是先后端分离模式仍是其余模式,都是为了更方便得解决需求,但它们都只是一个“中转站”。

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

相关文章
相关标签/搜索