對於前後端分離的一些思考

前端?後端?

按照通俗的理解,前端範圍很廣,運行於客戶端上的程序,頁面都可以說是前端,比如小程序,app,網頁等。與之相對的,後端就是運行於服務器上的程序,用戶不可見,不可達,透明,無論是java,php還是go,都可以編寫運行於服務器的程序。

 

分離

對用戶來說,前後端分離似乎是顯而易見的。因爲從用戶角度出發,我看的到的,進行交互的玩意不就是前端嗎,我不去關注的也接觸不到的不就是後端嗎?但是從開發者角度出發,卻不是這麼簡單。

大一剛開始學習的時候就參加了比賽做項目,那時候啥都不會,只學習了c和基本的數據結構,有幸找到了一個負責的老師指導,提供了很多幫助。由於我們隊伍的水平問題,老師讓我們學習asp技術搭配bootstrap。在asp技術棧中是如何寫頁面的呢,是在html中嵌入c#的代碼。從系統角度看,這樣導致系統耦合性高,業務和顯示難以分離。從開發者角度看,又得會asp,又得會前端三大件。現在技術越來越豐富,想全都精通是很難的。

所以得前後端分離。我認爲簡單的前後端分離可以這麼理解:前端開發者負責它的頁面,根據原型和設計做出頁面,編寫邏輯,需要什麼數據就請求接口。後端開發者與前端協商接口規範,完成業務,返回給前端數據,不用寫任何html,css,js,不用管數據如何變成視圖。大致步驟如下:

  1. 客戶端獲取到頁面數據後,js執行寫好的ajax請求。
  2. ajax請求接口,獲取後端業務返回的數據。
  3. 獲取數據後,採用異步/同步的方式渲染出頁面。

這樣,簡單的前後端分離就實現了,前端後端各幹各的活。

 

進階

大二後開始用php做後端,基本實現了上述的簡單前後端分離,大三後開始學springboot,項目遷移了一些。後來看了篇博客,裏面提到了阿里使用的一種方案,更新了我對前後端分離的一些理解。

我前端常用vue的原始方式開發,主要是貪圖它的mvvm方便,搭配一些ui框架可以快速的出貨。後端學了spring後用的spring全家桶中的springboot,畢竟開箱即用不要寫一堆配置。但是再開發中,總是覺得前後端的業務還是有重疊,對系統進行需求分析以及設計時也很傷腦子,接口定義一時爽,功能更改前端後端一起崩。

所以阿里的人將node.js環境架設在了前端後後端之間。node.js是服務端js的運行環境,所以說它是後端沒問題,但是它又向前端開發者提供了在後端開發的能力,而不要補充更多的知識。既然藉助node.js可以在服務器上運行js,前端就可以寫更多的東西,比如服務器渲染頁面,實現部分客戶端不能執行的業務邏輯而不用後端的參與,定義路由等操作。

詳情見:淘寶前後端分離實踐

 

疑惑

做前後端分離,能讓前端項目和後端項目分開是最好不過了。但是我在springboot中開發,有時候需要對頁面進行控制,實現一個攔截器進行訪問控制。這時候就將靜態資源都放在springboot項目中的靜態目錄了,nginx負責轉發所有流量(nginx在別的不用對頁面進行訪問控制的項目中進行動靜分離和均衡負載)到springboot的端口。這就造成我更新一次前端代碼就需要重新調用一次自動化部署工具到服務器上,而我的後端其實沒有更改。不知道企業裏面如何實現這些的,望指教。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章