事情的原由是這樣的,有個星球的小夥伴向邀請鬆哥在知乎上回答一個問題,原題是:前端
鬆哥認真看了下這個問題,感受對於初次接觸先後端分離的小夥伴來講,可能都會存在這樣的疑問,因而決定經過這篇文章和你們聊一聊這個話題。webpack
我這裏仍是儘可能從一個 Java 程序員的角度來講說這個問題,這樣你們可能更好理解。程序員
不少小夥伴可能知道,鬆哥本科是經管學院的,亞當•斯密的《國富論》多多少少仍是瞭解一點。書中提到人類社會的本質就是分工協做,亞當•斯密認爲人類之間的專業分工能夠極大的提升生產力、創造財富,專業分工也是工業革命的基礎。人類社會的發展過程就是一個專業分工不斷細化、不斷深化的過程,從最先的農牧分家到手工業農業分家再到商人的出現,其實都是專業分工不斷細化深化的體現。web
咱們的開發世界也是一個小宇宙,專業分工不斷細化也是一個趨勢,從這個角度來講,先後端分離,都是值得積極擁抱的。面試
先後端分離的開發方式在最近幾年忽然火起來,鬆哥認爲有兩方面的緣由:小程序
程序員之間的分工協做方式有所變化,開發方式固然也會隨着一塊兒變化。可是這種變化實際上是很是細微的,很容易上手的。後端
老實說,先後端分離以後,對 Java 程序員的要求變低了,之前你們你們出去面試 Java 工程師,若是是先後端不分的話,前端基本上也是必問的,常見的問題就是各類元素選擇器,這也很好理解,由於在先後端不分的開發方式中,後端工程師多多少少是要寫一點前端代碼的,你很難完徹底全的只寫 Java 代碼。可是在這種狀況下,你要寫的前端代碼其實都是很簡單的,不會是特別難的。網絡
先後端分離以後,Java 程序員只須要專一於後臺業務邏輯,對外接收前臺傳來的參數,根據參數給出不一樣的響應便可,基本上不須要寫前端代碼。由於這個時候的前端不一樣於先後端不分時候的前端,先後端分離以後,前端仍是有必定的難度,較爲常見的是 SPA 應用,涉及到 NodeJS、Webpack 等,此時若是還要讓後端工程師寫前端代碼,對後端工程師的技術要求就會比較高。架構
不過話說回來,先後端分離後,若是你還能即寫前端又寫後端,那可讓老闆加薪了。前後端分離
先後端不分的時候,不多會涉及到接口設計,以 SpringMVC 爲例,你可能返回的始終是 ModelAndView 一類的東西,先後端分離以後,咱們基本上不須要返回頁面了,後端主要是返回 JSON 數據,因此關鍵是設計好各類接口。
一個比較好的實踐方案是設計知足 RESTful 規範的接口,語義明確,簡潔明瞭,看到 URL 就知道你想幹嗎!
先後端分離以後,前端不可能等後端開發好接口以後再去開發,若是這樣,本來兩個月作完的項目可能就得 4 個月才能完成。
通常在開發以前,整個項目組須要先設計好一個接口文檔,通常能夠採用 Swagger 來作接口文檔(SpringBoot整合Swagger2,不再用維護接口文檔了!),文檔中約定了接口的詳細信息,先後端分別按照既定的接口規範去開發,在還沒有開發完成時,能夠藉助 Mock 來進行測試。
前端也是使用模擬數據進行測試,開發完成以後,先後端接口聯調,完成測試。
其實除了先後端交互方式發生變化以外,其餘的地方都是不變的。
先後端分離,通常來講是不會影響後端技術架構的,你使用了 SSM 或者 Spring Boot 或者 Dubbo 或者微服務,不管什麼,這些技術架構既能夠支撐你先後端不分的項目,也能夠支撐你先後端分離的項目。
所以我說後端技術架構不受先後端分離影響。
另外一方面,技術的根本不變,例如你作 Java 開發,該會的 SSM/SpringBoot/Redis/Nginx/Dubbo/SpringCloud/MySQL/MyCat/ELK/...等等,都還得會。
因此,仍是去老老實實擼代碼吧!
若是僅僅從一個 Java 程序員的角度來講,先後端分離開發這種方式,實際上是解放了 Java 程序員,可讓咱們專一於後端的工做,不用再去寫前端代碼,術業有專攻,能夠寫出更優質的後端代碼。不過話說回來,若是想保持一個良好的競爭力,仍是有必要去了解一下目前流行的前端開發方式。
先後端分離不是終點,只是軟件開發方式演變大潮下的一個點而已,將來的路還很長,還有不少東西須要咱們去學習,這只是一個其中一個而已。
最後再給你們推薦幾篇鬆哥以前寫的先後端分離的文章:
再推薦兩個入門項目:
好了,本文就說到這裏,有問題歡迎留言討論。
關注公衆號【江南一點雨】,專一於 Spring Boot+微服務以及先後端分離等全棧技術,按期視頻教程分享,關注後回覆 Java ,領取鬆哥爲你精心準備的 Java 乾貨!