一次前后端分离的实践

前后端分离该如何做? 这个问题,不同的技术人员,由于所处的岗位不一样,给出的答案都不一样。

前后端分离的问题,不仅仅是技术上的选型问题,还涉及到整个团队在认知、职责、流程上面重新定义的问题,这也是为什么前后端分离概念看起来简单易懂,但真正团队在落地的时候,一不小心,往往鸡飞狗跳,甚至最终放弃"治疗"。

下面,基于自己之前的对一个团队前后端分离改造的实践经历,介绍一下如何打造一个前后端分离的技术团队。

背景介绍

项目介绍

交付一个服务于跨境电商的供应链金融项目。 需求已经相对明确,产品的原型已经出来,大概有 60 多个 Web 端的企业内部信息化的页面,以平均 1 个页面 2。5 个接口来计算,整个工程差不多有 150 个接口。

项目的交付需求还包括技术使用前后端分离和微服务架构。

项目交付的时间需求一共是一个半月,大概 7 周的时间。

团队介绍

项目团队一共 8 个后端开发,4 个前端,2 个 QA,2 个产品,团队是从其它团队中,各自抽调出来的,之前都没有配合过。

团队的技术栈是传统的 SpringMVC + JSP + JQuery,团队成员对前后端分离的概念都只是听说,并没有任何实操的经历。

项目启动

古语云: 兵马未动,粮草先行。

1. 统一认识

任何技术团队都是有惯性的,新的变化 (包括新技术,新的业务,新的开发模式等) 在团队中的'落地生根'一般都有一个缓慢的适应过程。

而碰到这种时间紧、任务重的项目,不仅短期内需要引入这么多新的知识,并且还要求快速出成果,团队成员里,眼里都是各种各样的困难,从而影响到技术人员的心理状态,产生各种消极的,甚至排斥的想法。

所以,项目启动的时候,如何统一认识,快速让整个团队进入工作状态,是最重要的问题。

2. 划分边界,确定流程

从本质上来说,前后端分离,相对于前后端混合团队的最大差别就在于,团队内部的分工颗粒度更细。 或者也可以称为更加地解耦,从而让各个小团队在工作中更加地专注并且高效。

然后,解决分工的问题,相应也要引出协作的问题。把分工颗粒度切细了,边界划分清楚了,相应地也需要定义清楚各个小团队如何去高效协作,这样才能保证即高效,也不会相互干扰。

所以,前后端分离的第一步,也是最关键的一步,就是梳理清楚开发流程,及相应的角色职责。

角色职责

前端团队

负责页面展现的接口设计,功能页面的开发。 并最终提交给 QA 做功能测试

后端团队

负责后端的功能模块实现,根据前端定义的接口实现对外接口;

测试团队

负责衔接前端和后端团队

开发流程

如上图所示,里面定义出了三个团队在前后端分离的流程中,各自的工作内容。 其中最需要关注的就在于中间各个团队相互衔接的流程。

提交接口测试

后端团队 -> 测试团队。

后端团队按功能模块开发完接口,提交给测试团队进行集成接口测试

后端接口对接

测试团队 -> 前端团队

测试团队验收完接口后,可以移交给前端团队进行页面级别的接口接入。

提交功能测试

前端团队 -> 测试团队

前端团队完成了产品的包括页面及接口上对接的工作后,就可以提交给测试团队进行最终的功能页面验收了。

过程性文档

开发流程中,每一个核心的环节,特别是涉及到多方分工协作的环节,都需要有指定的文档输出及相应的评审。

前后端分离中,其中比较重要的过程性文档有如下四个:

接口契约文档

用于定义前端与后端之间的接口定义

责任方: 前端团队

第一个版本的接口契约定义,一定是前端团队出的。 是的,你没有看错,后端团队并不适合出接口的定义,因为前端团队的思维方式是 基于页面交互 来考虑的,后端团队的思维方式是 基于结构化实体 来考虑的。

评审方:后端团队,测试 QA,产品经理

集成测试用例文档

用于定义验收接口的用例

责任方: 测试 QA 团队

评审方: 后端团队,产品经理

功能测试用例文档

用于定义验收页面功能的用例

评审方: 前端团队,产品经理

责任方: 测试 QA 团队

单元测试用例文档

用于定义后端各个功能模块的单元用例

评审方: 后端团队,产品经理

责任方: 后端团队

3. 技术框架

前后端分离,技术团队的框架选型也是需要重点考虑的,一般这个职责都是各端开发的技术负责人来组织调研,并确定最终的框架。

技术框架的选型方式

编程语言

不同团队的编程语言基础技术栈都不一样,比如有些团队熟悉 PHP,有些团队甚至基于 GO 等,更多的核心考量点还是在于,团队成员接受度高,编程语言生态活跃度这几个维度。

框架选型

编程语言之上的各种框架选型,如网络框架,数据库框架等,更多的还是基于技术负责人的架构经验来进行选型。 只要记住一个原则:没有通用的框架,只有合适的框架。

我们团队最终的框架选型:

前端框架

编程语言:ECMA + React

React,Angular,Vue 都是优秀的前端框架,选择上更偏向于 Github 上面的生态中,React 是 最活跃,关注度最大 的层面上来考量的。

开发框架:DVA + Ant-design

阿里开源的基于 React 的框架的封装,其中有一个示例性的 demo 工程 antd-admin,可以在团队刚起步的时候,快速进入开发流程。

后端框架

编程语言:Java 8

后端开发是 Java 团队,不过建议使用 Java8 之前先做 Java 8 的培训,特别是 Lambda,Optinal 相关使用方法,应用场景相关的新特性培训。

开发框架:SpringBoot

一个好像不需要过多解释的框架。

集成测试框架

如果团队中的测试 QA 尚不俱备技术开发能力,建议使用 Postman 来进行集成接口测试

编程语言:Python

测试开发最方便的编程语言

开发框架:Pytest

测试用例框架

项目管理

到这里,准备工作基本就结束了。下面,你需要对整个项目的流程进行规定。

1. 定义 0.1 的里程碑

所有技术框架都只是调研的,所有流程都只是浮于表面的。

项目开工的第一个核心任务就是讨论出最小的工程子集,目标是可以跑通所有的流程及相应的技术框架。

整个团队形成一个共识,然后启动开发。 从 0 到 0.1 的过程中,会碰到大量的问题,这些问题只要不阻塞开发流程的推进,即使处理得磕磕碰碰的,都可以暂时放一边。 比如说文档的格式如何写,代码的风格之类的。

当 0.1 的里程碑完成后,整个团队会对前后端分离,不管是流程上,还是技术上,都会有一个基本的认识,并且,会有一定的成就感。 这也代表前后端分离已经有了一个好的开端了。

2. 前后端进度分离

当团队熟悉前后端分离的流程后,前端团队和后端团队的进度就可以考虑彻底分开了。

前端团队的进度

可以基于 Mock 接口的方式,分成三个阶段:

2

按页面划分,快速出所有的页面

只考虑量,不考虑质,以基本跑通所有的 Mock 接口为标准。

这里更多的考虑在于,前端接触新的框架,会积累很多问题,包括 CSS 之类的,包括接口调用之类的,这些问题都有共通性,可以在下一次迭代的时候,总结出问题,分不同的人去解决。

4

基于所有的页面进行迭代

划分不同的人去解决团队积累下来的问题,并统一修复。可以尝试抽出一些共性的组件。

6

分批接入后端的模块接口

到这个阶段的时候,后端的接口理论上 QA 根据模块,已经验收了一部分了,可以开始分批接入,并最终提交给 QA 进行功能上的测试。

后端团队的进度

按模块切分开发,接口分批提交验收。

后端可以基于业务来切分子模块,然后,各个模块并行开发。 接口实现后,由 QA 去进行集成用例的验收。

测试团队的工作内容

QA 在前后端分离流程,扮演着足球'中场'的角色,这个角色把前端团队这个'前场'和后端团队这个'后场',串联起来,承上启下,让他们可以各司其职,降低相互之间的耦合性。

核心工作就三个部分:

8

分批次验收后端的模块接口

在没有页面的前提下,使用工具,参考集成测试用例,对接口的健壮性,可靠性进行详细验证,保证在前端页面开始接入接口的时候,接口是稳定可靠的。

10

分批次验收前端的功能页面

基于功能测试用例,进行页面级别上的功能回归

12

整合前后端的 BUG 信息

前后端的 BUG 信息全部是反馈给 QA,由 QA 统一去追相应的技术人员。 比如说前端发现有个接口有问题,只反馈给 QA,剩下的工作就是由 QA 去找相应的后端负责人。

从 1 到 N 的迭代

在这个过程中,团队需要的是耐心及专注。

团队的技术成长都是有节奏的,是没有办法一步到位的。

作为项目或者技术负责人,在这个时候,要有相对宽容的心态是看待这个问题。

随着项目一次次迭代,会引出一个个问题,比如说,如何更加有效地写单元测试用例,如何 更加 有效的提高页面的渲染效率,如何让页面的组件 更加 的通用化。

请注意"更加"这个词,团队在不断解决"更加"的问题过程中,也是不断成长的过程。

最终,整个技术团队会演化成一个高效分工,专注各自领域的前后端分离的快速开发的团队。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++解析-外传篇(1):异常处理深度解析

0.目录 1.异常的最终处理 2.结束函数terminate() 3.小结 1.异常的最终处理 问题: 如果在main函数中抛出异常会发生什么? 如果异常不处理,最后会传到哪里? 下面的代码的输出什么? 示例——异常的最终处理?&a…

springboot快速集成swagger

今天技术总监说:小明,我们本次3.0改造,使用swagger2.0作为前后端分离的接口规范,它可以一键生成前后端的API,一劳永逸……小明:??? Spring Boot 框架是目前非常流行的微服务框架&…

php curl处理get和post请求

CURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 CURL 库。使用PHP的CURL 库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网页&#xff0…

前端攻略系列(二) - 前端各种面试题

幸运且光荣的被老大安排了一个任务 - “去整理些前端面试题”。年前确实不是招人的好时候,所以我们前端团队经过了超负荷的运转,终于坚持过了春节。春节以后就开始招人啦,这套题考察的目标就是基础基础再基础,嘿嘿。 事先声明&…

html 初识

一、web请求流程模拟 python编写的简易服务器应用程序 import socketserversocket.socket() ip_port (127.0.0.1,8080) server.bind(ip_port) server.listen()while 1:conn, addr server.accept()from_browser_msgconn.recv(1024)print(from_browser_msg)conn.send(bHTTP/1.1 …

WEB文件上传之JQuery ajaxfileupload插件使用(二)

1.JQuery ajaxfileupload插件使用准备 下载地址: http://www.phpletter.com/DOWNLOAD/ 2.原理分析 ajaxfileupload也是利用iframe实现无刷新异步提交,与我的上一篇文章(WEB文件上传之apache common upload使用(一)&…

Navicat安装激活

有条件的同学麻烦不要使用下面的激活步骤,仅供个人学习使用 。。。。。。 。。。。。。 。。。。。。 。。。。。。 一、去官网下载最新Navicat软件https://www.navicat.com.cn/download/navicat-premium 二、去下载激活脚本https://github.com/DoubleLabyrinth/nav…

WEB文件上传之apache common upload使用(一)

文件上传一个经常用到的功能,它有许多中实现的方案。 页面表单 RFC1897规范 http协议上传 页面控件(flash/html5/activeX/applet) RFC1897规范 http协议上传 页面控件(flash/html5/activeX/applet) 自定义数据规范 http协议上传 页面控件(flash/html5/act…

前端CSS学习笔记

一 CSS介绍 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(超文本标记语言)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语…

Java爬取并下载酷狗音乐

本文方法及代码仅供学习,仅供学习。 案例: 下载酷狗TOP500歌曲,代码用到的代码库包含:Jsoup、HttpClient、fastJson等。 正文: 1、分析是否可以获取到TOP500歌单 打开酷狗首页,查看TOP500,发现存…

Webpack/Vue-cli两种方式加载markdown文件并实现代码高亮

准备的资源: highlight.js : 实现代码高亮,通过npm install highlight.js -D安装 vue-markdown-loader:解析md文件的必备loader,通过npm install vue-markdown-loader -D安装 下面我们分两个场景来说明一下md文件的…

新浪微博第三方登陆重定向错误23123

新浪微博第三方登陆重定向错误23123 2019年06月02日 13:49:43 温室花朵 阅读数:2更多 个人分类: 第三方微博登陆21323编辑当我们使用微博第三方登陆的时候,发现登陆出错了,错误码为:21323,解决方案如下&…

Utility Manager 的一些百度不了的操作

一进来是不是这样的! 那突然出了点问题,咋办呢! 就像这样子的, 恢复默认布局就OK啦!哈哈哈,太聪明啦,但是百度了好长时间还是找不到啊,怎么办呐,烦死啦! 其实…

记录一次内网渗透试验

0x00 前言 目标:给了一个目标机ip,要求得到该服务器权限,并通过该ip渗透至内网控制内网的两台服务器 攻击机:kali (192.168.31.51) 目标机:windows 2003 (192.168.31.196) 0x01 信息收集 nmap端口探测 御剑后台扫描 …

2018-2019 1 20165203 实验五 通用协议设计

2018-2019 1 20165203 实验五 通用协议设计 OpenSSL学习 定义:OpenSSL是为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。基本功…

弄懂webpack,只要看这一片就够了(文末有福利)

什么是webpack ​ webpack是什么,官网中是这么说的。 ​ 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包…

beta冲刺总结那周余嘉熊掌将得队

作业格式 课程名称:软件工程1916|W(福州大学)作业要求:项目Beta冲刺团队名称: 那周余嘉熊掌将得队作业目标:beta冲刺总结队员学号队员姓名博客地址备注221600131Jaminhttps://www.cnblogs.com/JaminWu/队长…

在Winform中菜单动态添加“最近使用文件”

最近在做文件处理系统中,要把最近打开文件显示出来,方便用户使用。网上资料有说,去遍历“C:\Documents and Settings\Administrator\Recent”下的最近文档本。文主要介绍在Winform界面菜单中实现【最近使用的文件】动态菜单的处理&#xff0c…

Vue组件通信原理剖析(一)事件总线的基石 $on和$emit

首先我们先从一个面试题入手。 面试官问: “Vue中组件通信的常用方式有哪些?” 我答: 1. props 2. 自定义事件 3. eventbus 4. vuex 5. 还有常见的边界情况$parent、$children、$root、$refs、provide/inject 6. 此外还有一些非props特性$att…

display:flex弹性布局

一、背景 前段时间帮公司运维小姑娘调整她自己写的页面样式时发现她用了display: flex,我这个后端老古董还不太懂flex,自愧不如啊,所以写篇博客记录学习下。 现在写的前端页面还停留在依赖 display 属性 position属性 float属性的布局方式&…