以Java?Web項(xiàng)目為例淺談前后端分離開(kāi)發(fā)模式
為什么要前后端分離?
以Java Web項(xiàng)目為例,在傳統(tǒng)的開(kāi)發(fā)模式中,前端代碼(Html、js、css)寫(xiě)在JSP中,甚至JSP中嵌入Java代碼。當(dāng)用戶(hù)訪(fǎng)問(wèn)網(wǎng)站時(shí),頁(yè)面數(shù)據(jù)也就是Html文檔,由Servlet容器將jsp編譯成Servlet,然后將jsp中的html,css,js代碼輸出到瀏覽器,這個(gè)過(guò)程需要經(jīng)過(guò)很多步驟,才能響應(yīng)用戶(hù)的請(qǐng)求。這個(gè)過(guò)程非常繁瑣,效率低下,直接造成了頁(yè)面響應(yīng)速度慢的效果。從項(xiàng)目維護(hù)的角度上,傳統(tǒng)的開(kāi)發(fā)模式,前端代碼和后端代碼耦合在一起,導(dǎo)致代碼混亂不堪,極大的降低了項(xiàng)目的可維護(hù)性,增加了維護(hù)成本。從開(kāi)發(fā)角度來(lái)看,研發(fā)人員在開(kāi)發(fā)過(guò)程中,不僅要設(shè)計(jì)后端架構(gòu)還要兼顧前端展示,導(dǎo)致開(kāi)發(fā)效率低下,延長(zhǎng)開(kāi)發(fā)周期。揚(yáng)長(zhǎng)避短,為什么不讓專(zhuān)業(yè)的人去做專(zhuān)業(yè)的事?
傳統(tǒng)的開(kāi)發(fā)模式下的系統(tǒng)數(shù)據(jù)交互圖:

傳統(tǒng)開(kāi)發(fā)模式的劣勢(shì)和不足:
- 開(kāi)發(fā)出的軟件響應(yīng)速度慢,質(zhì)量差,用戶(hù)體現(xiàn)差。
- 前后端嚴(yán)重耦合,代碼混亂,可維護(hù)性差。
- 研發(fā)人員前后端兼顧,開(kāi)發(fā)效率低下,研發(fā)周期變長(zhǎng)。
為了解決傳統(tǒng)開(kāi)發(fā)模式中的這些病痛,前后端分離框架應(yīng)用而生。
什么是前后端分離?
在前后端分離的開(kāi)發(fā)模式中,后端僅返回前端所需的數(shù)據(jù),前端負(fù)責(zé)渲染HTML頁(yè)面,后端不再控制前端的效果,用戶(hù)看到什么樣的效果,從后端請(qǐng)求的數(shù)據(jù)如何加載到前端中,都由前端自己決定,后端僅僅需要提供一套邏輯對(duì)外提供數(shù)據(jù)即可,并且前端與后端的耦合度相對(duì)較低,在這種模式中,我們通常將后端開(kāi)發(fā)的每個(gè)視圖都成為一個(gè)接口,或者API,前端通過(guò)訪(fǎng)問(wèn)接口來(lái)對(duì)數(shù)據(jù)進(jìn)行增刪改查??偨Y(jié)一句話(huà),后臺(tái)負(fù)責(zé)提供數(shù)據(jù),前端負(fù)責(zé)數(shù)據(jù)展示,職責(zé)分離,分工明確。
對(duì)應(yīng)的數(shù)據(jù)交互如下圖:

前后端分離的優(yōu)缺點(diǎn)?
為優(yōu)質(zhì)產(chǎn)品打造精益團(tuán)隊(duì):
術(shù)業(yè)有專(zhuān)攻,通過(guò)前后端分離,讓前后端工程師只需要專(zhuān)注于前端或者后端的開(kāi)發(fā)工作,有利于編寫(xiě)出高質(zhì)量的代碼,培養(yǎng)開(kāi)發(fā)工程師獨(dú)特的技術(shù)特性,然后構(gòu)建出一個(gè)全棧式的精益開(kāi)發(fā)團(tuán)隊(duì)。
提高工作效率,分工更加明確:
前后端分離的工作流程可以使得前端專(zhuān)心前端,后端關(guān)心后端,兩者開(kāi)發(fā)同時(shí)進(jìn)行,提高開(kāi)發(fā)效率,頁(yè)面的增加和路由的修改也不必再去麻煩后端,開(kāi)發(fā)更加靈活。
降低服務(wù)器負(fù)載,系統(tǒng)性能提升:
通過(guò)前端路由的配置,我們可以實(shí)現(xiàn)頁(yè)面的按需加載,無(wú)需一開(kāi)始加載首頁(yè)便加載網(wǎng)站的所有資源,服務(wù)器也不再需要解析前端頁(yè)面,在頁(yè)面交互及用戶(hù)體驗(yàn)上有所提升。
增強(qiáng)代碼的可維護(hù)性
前后端分離后,應(yīng)用的代碼不再是前后端混合,只有在運(yùn)行期才會(huì)調(diào)用依賴(lài)關(guān)系,并且分層明確,應(yīng)用代碼變得整潔清晰。
對(duì)于你們的團(tuán)隊(duì)和產(chǎn)品有沒(méi)有必要前后端分離?
要回答這個(gè)問(wèn)題,需要從團(tuán)隊(duì)人員分配、人力資源和研發(fā)技能儲(chǔ)備這三個(gè)方面出發(fā),進(jìn)行探討決定。 如果團(tuán)隊(duì)人員比較少、人力資源不足,項(xiàng)目不大我覺(jué)得沒(méi)必要前后端分離。
到此這篇關(guān)于以Java Web項(xiàng)目為例淺談前后端分離開(kāi)發(fā)模式的文章就介紹到這了,更多相關(guān)Java前后端分離開(kāi)發(fā)模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot集成Elasticsearch的步驟與相關(guān)功能
ElasticSearch是開(kāi)源搜索平臺(tái)領(lǐng)域的一個(gè)新成員,?ElasticSearch是一個(gè)基于Lucene構(gòu)建的開(kāi)源,分布式,RESTful搜索引擎,這篇文章主要給大家介紹了關(guān)于Springboot集成Elasticsearch的相關(guān)資料,需要的朋友可以參考下2021-12-12
SpringBoot整合Quartz及異步調(diào)用的案例
Quartz是一個(gè)完全由java編寫(xiě)的開(kāi)源作業(yè)調(diào)度框架、它的簡(jiǎn)單易用受到業(yè)內(nèi)人士的一致好評(píng),這篇文章主要介紹了SpringBoot整合Quartz及異步調(diào)用,需要的朋友可以參考下2023-03-03
泛型的類(lèi)型擦除后fastjson反序列化時(shí)如何還原詳解
這篇文章主要為大家介紹了泛型的類(lèi)型擦除后fastjson反序列化時(shí)如何還原詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
深入淺出講解Spring框架中AOP及動(dòng)態(tài)代理的應(yīng)用
在軟件業(yè),AOP為Aspect?Oriented?Programming的縮寫(xiě),意為:面向切面編程,通過(guò)預(yù)編譯方式和運(yùn)行期間動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)2022-03-03
Spring遠(yuǎn)程調(diào)用HttpClient/RestTemplate的方法
這篇文章主要介紹了Spring遠(yuǎn)程調(diào)用HttpClient/RestTemplate的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
JPA添加Pageable實(shí)現(xiàn)翻頁(yè)時(shí)報(bào)錯(cuò)的問(wèn)題
這篇文章主要介紹了解決JPA添加Pageable實(shí)現(xiàn)翻頁(yè)時(shí)報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09

