我喜歡這樣的問題。
如果是問“什么是正確的前后端分離”,我還真不敢回答,生怕自己的理解有什么偏差;但是問怎么“理解前后端分離”,那我可以結合自身的工作,談談我對前后端分離的理解,也歡迎大家提出不同的理解。
我07年參加工作就是做企業(yè)級項目的開發(fā),那時候的一些項目都只有一個包,沒有什么代碼規(guī)范,業(yè)務邏輯散落在各處,甚至是JSP中直接訪問數(shù)據(jù)庫并做業(yè)務處理。
后來逐漸有了一些規(guī)范,頁面就是頁面,代碼就是代碼,很多項目開始使用Ajax框架。
發(fā)展的更進一步,后端代碼有了分層,cotroller/service/dao,可能每個項目分層策略不同(三層和兩層居多),每層的叫法不同(cotroller還是action),數(shù)據(jù)從頁面到最后訪問數(shù)據(jù)庫,需要走到多個分層中。
不過到了此階段,在企業(yè)級項目的開發(fā)過程中,Java程序員依然要兼顧前后端的開發(fā),所以前端頁面的樣子嘛,達不到美觀的程度,也就是能用。
頁面是頁面,代碼是代碼,但是他們在一個包中,這個肯定不能算前后端分離;
前端頁面一個程序包,后臺代碼一個程序包,兩個包都需要部署到Tomcat上,前端調用后臺的接口;
我認為這個也不是嚴格的前后端分離,但是我覺的這樣做也沒有問題; 如果前端只有HTML文件,放到HTTP服務器上,瀏覽器只訪問獲取這些HTML就好了,數(shù)據(jù)是從后臺程序提供的接口獲得;這樣才算是前后端就分離了。
前后端分離有很多的好處:前端開發(fā)和后端開發(fā)可以各司其職,約定好接口之后就可以并行開發(fā);后端接口可以復用,如果項目同時有電腦網頁端、移動網頁端、APP端等多個入口的時候,后端可以只有一個;
帶來好處的同時,也會有一些缺點,例如:增加了架構的復雜性,如果技術能力不足的團隊,可以考慮半分離(例如我們部門都是企業(yè)級應用,都沒有前端開發(fā)人員);如果是面向互聯(lián)網的應用,需要搜索引擎抓取,就需要服務器端渲染;另外前后端交互的接口,也需要花時間和精力設計。
最后,是否需要使用前后端分離,還需要根據(jù)項目的實際情況決定。