摘要:采用前后端分離模式可以減后臺(tái)負(fù)擔(dān),加快研發(fā)效率,當(dāng)然,前提是前端能做好的話。還是基礎(chǔ)不夠?qū)е碌暮蠖耸欠耧L(fēng)格很多公司采用了前后端分離模式后,后端仍然采用以往的傳統(tǒng)風(fēng)格,這是不合理的,風(fēng)格的應(yīng)該是前后端分離的最佳實(shí)踐。
早期的web開發(fā)是不分前端后端的。
互聯(lián)網(wǎng)進(jìn)入Web2.0時(shí)代之后,大量網(wǎng)站從純展示型網(wǎng)站演變成類似桌面軟件的Web應(yīng)用,網(wǎng)站的前端也變的越來(lái)越復(fù)雜, 慢慢就形成了這樣一個(gè)多帶帶的職業(yè)。隨著前后端分離,前端各種框架層出不窮,前端的能力也越來(lái)越大,工作量跟后端相比也越來(lái)越平衡甚至更多。
為什么要分離?
我們不能“為了分離而分離”,而應(yīng)該“為了真正理解web開發(fā)、為了更好完成需求而分離”。
前后端分離的誤區(qū)?
1、前端人員配備是否充足?
由于所在公司以往項(xiàng)目采用傳統(tǒng)開發(fā)風(fēng)格,即以后端MVC為主的開發(fā)模式,前端人員僅僅提供靜態(tài)html頁(yè)面,其余工作皆由后端開發(fā)人員完成。采用前后端分離模式可以減后臺(tái)負(fù)擔(dān),加快研發(fā)效率,當(dāng)然,前提是前端能做好的話。以往只需要提供靜態(tài)頁(yè)面的前端人員,在前后端分離模式中要負(fù)責(zé)項(xiàng)目的view+controller部分,即除了靜態(tài)頁(yè)面,還需要負(fù)責(zé)頁(yè)面的所有交互代碼、以及nodejs與視圖層以及后端API的交互工作,無(wú)疑增加了前端人員的學(xué)習(xí)成本,在沒有足夠知識(shí)和人才儲(chǔ)備的情況下,只能讓前端人員加班加點(diǎn)。結(jié)果是大量前端人員離職(PS:做這么多事,工資總得加吧!)
2、前后端職責(zé)分配?
很多公司認(rèn)為采用前后端分離之后,前后端只需要通過(guò)指定API進(jìn)行交互即可,前端負(fù)責(zé)頁(yè)面渲染,Nodejs負(fù)責(zé)路由分配,后端提供API。忽視了大量關(guān)鍵工作,職責(zé)分配和細(xì)節(jié)處理沒有相應(yīng)文檔規(guī)定,緩存機(jī)制、圖片上傳下載、數(shù)據(jù)校驗(yàn)、語(yǔ)言國(guó)際化等等并沒有出具相應(yīng)信息。另外,大量忽視了nodejs層的作用,僅僅把nodejs當(dāng)成一個(gè)路由中轉(zhuǎn),這一方面也是對(duì)nodejs技術(shù)的不熟悉導(dǎo)致的,其實(shí)nodejs能負(fù)責(zé)很多事,除了復(fù)雜業(yè)務(wù)邏輯處理和數(shù)據(jù)操作由Java 負(fù)責(zé),大量工作完全可以在nodejs層處理。(PS:還是基礎(chǔ)不夠?qū)е碌模。?/p>
3、后端API是否Restful風(fēng)格?
很多公司采用了前后端分離模式后,后端API仍然采用以往的傳統(tǒng)風(fēng)格,這是不合理的,Restful風(fēng)格的API應(yīng)該是前后端分離的最佳實(shí)踐。ResultFul推薦每個(gè)URL能操作具體的資源,而且能準(zhǔn)確描述服務(wù)器對(duì)資源的處理動(dòng)作,通常服務(wù)器對(duì)資源支持get/post/put/delete/等,用來(lái)實(shí)現(xiàn)資源的增刪改查。前后端分離的話,這些api-url是對(duì)接的橋梁,采用resultFul接口地址含義才更清晰、見名知意。(PS:用了Spring4.x 竟然還不用rest風(fēng)格,說(shuō)不過(guò)去啊)
4、前后端協(xié)作模式?
前后端分離后,無(wú)論是API接口的對(duì)接還是測(cè)試工作,都涉及到前后端人員的溝通,很多公司采用前后端分離后,前后端協(xié)作模式配合力度底,互相等待,開發(fā)效率低下,反而不如傳統(tǒng)的開發(fā)模式。例如:當(dāng)后端 API 沒有編寫完成時(shí),前端無(wú)法進(jìn)行調(diào)試,這就導(dǎo)致了前端會(huì)被后端阻塞的情況。其實(shí)像這種互相等待的模式需要改進(jìn), Mock Server 可能可以解決一些問題。
如何前后端分離?
怎么做前后端分離?大方向就是
后端專注于:后端控制層(Restful API) & 服務(wù)層 & 數(shù)據(jù)訪問層;
前端專注于:前端控制層(Nodejs) & 視圖層
本人認(rèn)為的前后端分離模式應(yīng)該是這樣,當(dāng)然這不一定正確:
1、項(xiàng)目設(shè)計(jì)階段,前后端架構(gòu)負(fù)責(zé)人將項(xiàng)目整體進(jìn)行分析,討論并確定API風(fēng)格、職責(zé)分配、開發(fā)協(xié)助模式,確定人員配備;設(shè)計(jì)確定后,前后端人員共同制定開發(fā)接口。
2、項(xiàng)目開發(fā)階段,前后端分離是各自分工,協(xié)同敏捷開發(fā),后端提供Restful API,并給出詳細(xì)文檔說(shuō)明,前端人員進(jìn)行頁(yè)面渲染前臺(tái)的任務(wù)是發(fā)送API請(qǐng)(GET,PUT,POST,DELETE等)獲取數(shù)據(jù)(json,xml)后渲染頁(yè)面。
3、項(xiàng)目測(cè)試階段,API完成之前,前端人員會(huì)使用mock server進(jìn)行模擬測(cè)試,后端人員采用junit進(jìn)行API單元測(cè)試,不用互相等待;API完成之后,前后端再對(duì)接測(cè)試一下就可以了,當(dāng)然并不是所有的接口都可以提前定義,有一些是在開發(fā)過(guò)程中進(jìn)行調(diào)整的。
4、項(xiàng)目部署階段,利用nginx 做反向代理,即Java + nodejs + nginx 方式進(jìn)行。
參考
課程分享:
直播時(shí)間:2018.07.15 晚8:00~10:00pm
新前端能力課堂之前后端分離實(shí)戰(zhàn)
或者加入企鵝群:707871733 領(lǐng)取資料
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/96131.html
摘要:采用前后端分離模式可以減后臺(tái)負(fù)擔(dān),加快研發(fā)效率,當(dāng)然,前提是前端能做好的話。還是基礎(chǔ)不夠?qū)е碌暮蠖耸欠耧L(fēng)格很多公司采用了前后端分離模式后,后端仍然采用以往的傳統(tǒng)風(fēng)格,這是不合理的,風(fēng)格的應(yīng)該是前后端分離的最佳實(shí)踐。 showImg(https://segmentfault.com/img/bVFC8f?w=690&h=360);早期的web開發(fā)是不分前端后端的。互聯(lián)網(wǎng)進(jìn)入Web2.0時(shí)...
摘要:采用前后端分離模式可以減后臺(tái)負(fù)擔(dān),加快研發(fā)效率,當(dāng)然,前提是前端能做好的話。還是基礎(chǔ)不夠?qū)е碌暮蠖耸欠耧L(fēng)格很多公司采用了前后端分離模式后,后端仍然采用以往的傳統(tǒng)風(fēng)格,這是不合理的,風(fēng)格的應(yīng)該是前后端分離的最佳實(shí)踐。 showImg(https://segmentfault.com/img/bVFC8f?w=690&h=360);早期的web開發(fā)是不分前端后端的?;ヂ?lián)網(wǎng)進(jìn)入Web2.0時(shí)...
摘要:我所在的美團(tuán)酒店事業(yè)部去年月份成立,新的業(yè)務(wù)新的開發(fā)團(tuán)隊(duì),這一切使得我們的前后端分離推進(jìn)的很徹底。日志監(jiān)控平臺(tái)日志監(jiān)控平臺(tái)是美團(tuán)內(nèi)部的一個(gè)日志收集系統(tǒng),目前美團(tuán)統(tǒng)一使用收集日志,具有接收格式日志的能力,而日志監(jiān)控平臺(tái)也是以格式日志來(lái)收集。 轉(zhuǎn)自:美團(tuán)技術(shù)團(tuán)隊(duì) 作者:美團(tuán)技術(shù)團(tuán)隊(duì) 分享理由:很好的分享,可見,基于Node的前后端分離的架構(gòu)是越顯流行和重要,前端攻城獅們,No...
摘要:但似乎他們的職責(zé)在以前甚至于現(xiàn)在都并不明確,雖然前端是跟瀏覽器打交道,但是最終瀏覽器拿到的頁(yè)面是服務(wù)器通過(guò)模板生成的一個(gè)臨時(shí)靜態(tài)頁(yè)面而已。當(dāng)然,一般傳統(tǒng)上的開發(fā)協(xié)作模式有兩種一種是前端先寫一個(gè)靜態(tài)頁(yè)面,寫好后,讓后端去套模板。隨著不同終端(Pad/Mobile/PC)的興起,對(duì)開發(fā)人員的要求越來(lái)越高,純?yōu)g覽器端的響應(yīng)式已經(jīng)不能滿足用戶體驗(yàn)的高要求,往往需要針對(duì)不同的終端開發(fā)定制的版本,為了提...
摘要:先來(lái)看一張系統(tǒng)前后端架構(gòu)模型圖。一種接口的約定本文用于定義一種統(tǒng)一的接口設(shè)計(jì)方案,希望具有參考價(jià)值。,和都是常見的軟件架構(gòu)設(shè)計(jì)模式,它通過(guò)分離關(guān)注點(diǎn)來(lái)改進(jìn)代碼的組織方式。 如何無(wú)痛降低 if else 面條代碼復(fù)雜度 相信不少同學(xué)在維護(hù)老項(xiàng)目時(shí),都遇到過(guò)在深深的 if else 之間糾纏的業(yè)務(wù)邏輯。面對(duì)這樣的一團(tuán)亂麻,簡(jiǎn)單粗暴地繼續(xù)增量修改常常只會(huì)讓復(fù)雜度越來(lái)越高,可讀性越來(lái)越差,有沒...
閱讀 1680·2021-11-17 09:33
閱讀 3545·2021-11-16 11:40
閱讀 3063·2019-08-30 11:23
閱讀 1056·2019-08-29 16:36
閱讀 2473·2019-08-29 13:23
閱讀 1748·2019-08-29 12:59
閱讀 1551·2019-08-29 12:42
閱讀 1988·2019-08-28 18:22