一次前后端分離的實踐

前后端分離該如何做? 這個問題,不同的技術人員,由于所處的崗位不一樣,給出的答案都不一樣。

前后端分離的問題,不僅僅是技術上的選型問題,還涉及到整個團隊在認知、職責、流程上面重新定義的問題,這也是為什么前后端分離概念看起來簡單易懂,但真正團隊在落地的時候,一不小心,往往雞飛狗跳,甚至最終放棄"治療"。

下面,基于自己之前的對一個團隊前后端分離改造的實踐經歷,介紹一下如何打造一個前后端分離的技術團隊。

背景介紹

項目介紹

交付一個服務于跨境電商的供應鏈金融項目。 需求已經相對明確,產品的原型已經出來,大概有 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.pswp.cn/news/248843.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248843.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248843.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

queryList爬蟲獲取內容的幾種方法總結 queryList給抓取的內容增加html追加元素html 代碼實例...

//簡略內容: 1. $data1 $ql->find(.two img)->map(function($item){return $item->alt; }); // 等價下面這句話 $data2 $ql->find(.two img)->attrs(alt);2. $texts $ql->find(.two>a)->texts(); $htmls $ql->find(#one span)->htmls();3. $…

C++解析-外傳篇(1):異常處理深度解析

0.目錄 1.異常的最終處理 2.結束函數terminate() 3.小結 1.異常的最終處理 問題: 如果在main函數中拋出異常會發生什么? 如果異常不處理,最后會傳到哪里? 下面的代碼的輸出什么? 示例——異常的最終處理?&a…

《淺談架構之路:前后端分離模式》 - 山人行 - 博客園

前言:分離模式 對前后端分離研究了一段時間,恰逢公司有一個大項目決定嘗試使用前后端分離模式進行,便參與其中。該項目從2016年初立項至今,平平穩穩得度過,但也涌現出越來越多的問題,絕對不是說前后端分離模…

springboot快速集成swagger

今天技術總監說:小明,我們本次3.0改造,使用swagger2.0作為前后端分離的接口規范,它可以一鍵生成前后端的API,一勞永逸……小明:??? Spring Boot 框架是目前非常流行的微服務框架&…

php curl處理get和post請求

CURL 是一個利用URL語法規定來傳輸文件和數據的工具,支持很多協議,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 CURL 庫。使用PHP的CURL 庫可以簡單和有效地去抓網頁。你只需要運行一個腳本,然后分析一下你所抓取的網頁&#xff0…

【Web】JavaWeb項目為什么我們要放棄jsp?為什么要前后端解耦?為什么要前后端分離?2.0版,為分布式架構打基礎。 - CSDN博客

前戲 前后端分離已成為互聯網項目開發的業界標準使用方式,通過nginxtomcat的方式(也可以中間加一個nodejs)有效的進行解耦, 并且前后端分離會為以后的大型分布式架構、彈性計算架構、微服務架構、多端化服務(多種客戶…

MongoDB升級導致啟動失敗

起因 最近項目使用MongoDB,但是作為一個技術菜鳥,NoSQL數據庫我還真不會用,于是我就在自己的阿里云服務器上安裝了一個MongoDB4.0.9。 現象 但是當我使用yum -y update升級以后,MongoDB無法啟動了,即使重裝刪除了MongDB的文件了還…

測者的測試技術手冊:揭開java method的一個秘密--巨型函數

揭開java method的一個秘密:巨型函數 相信,很多人都不知道Java的Method的上限為64K。本文將超過這個上限的函數叫做巨型函數。 巨型函數的問題 1、如果代碼超過了這個限制,Java編譯器就報"Code too large to complier"的錯誤。 2、…

前端攻略系列(二) - 前端各種面試題

幸運且光榮的被老大安排了一個任務 - “去整理些前端面試題”。年前確實不是招人的好時候,所以我們前端團隊經過了超負荷的運轉,終于堅持過了春節。春節以后就開始招人啦,這套題考察的目標就是基礎基礎再基礎,嘿嘿。 事先聲明&…

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 …

Iframe的那些事

在web開發中,經常會用到iframe,難免會碰到需要在父窗口中使用iframe中的元素、或者在iframe框架中使用父窗口的元素 js 在父窗口中獲取iframe中的元素 1、 格式:window.frames["iframe的name值"].document.getElementByIdx_x(…

異常處理try...catch...throw

C 引入了異常處理機制。其基本思想是:函數 A 在執行過程中發現異常時可以不加處理,而只是“拋出一個異常”給 A 的調用者,假定為函數 B。 拋出異常而不加處理會導致函數 A 立即中止,在這種情況下,函數 B 可以選擇捕獲 …

Makefile 中:= ?= += =的區別

是最基本的賦值: 是覆蓋之前的值? 是如果沒有被賦值過就賦予等號后面的值 是添加等號后面的值轉載于:https://www.cnblogs.com/mingyunrangwozoudaoxianzai/p/10118039.html

原生JS寫Ajax的請求函數

本文主要介紹了如何通過原生JavaScript封裝ajax請求,文中給出了具體的實現代碼和詳細的解釋,希望對你有所幫助。 一、JS原生Ajax ajax:一種請求數據的方式,不需要刷新整個頁面; ajax的技術核心是 XMLHttpRequest 對象&…

軟件工程--第十三周學習進度

第十三周代碼量258 所花時間 6h博客量 2篇了解到的知識點 在尋找“水王”程序編寫時,學習了一種新的設計思想,兩兩刪除法,最后剩下的就是水王。這種設計思想,感覺可以用到多種編程,感覺很有意思。轉載于:https://www.c…

如何使用 tf object detection

# 如何使用 tf object detectionhttps://juejin.i m/entry/5a7976166fb9a06335319080https://towardsdatascience.com/how-to-train-your-own-object-detector-with-tensorflows-object-detector-api-bec72ecfe1d9https://towardsdatascience.com/building-a-toy-detector-with…

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不僅可以靜態地修飾網頁,還可以配合各種腳本語…