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