劉嵩 李文蕙
武漢軟件工程職業學院
使用JavaWEB進行WEB應用開發的方案有很多種,例如早期的純JSP模式、JSP+JavaBean模式以及經典的MVC設計模式。
早期WEB應用開發需求很簡單時,開發者會使用純JSP的方式來實現系統需求。一部分JSP混合Java代碼和HTML標簽用來呈現數據,另外一部分JSP負責業務邏輯和數據訪問。這種方式只適合于業務流程簡單的應用,如果系統復雜則導致JSP代碼可讀性差,難以維護。
為了提高程序代碼的可讀性和可維護性,開發者開始使用JSP+JavaBean的模式進行網站開發。JSP負責數據顯示,JavaBean負責業務邏輯和數據訪問。這種方式讓代碼更易讀,提高了邏輯代碼的可重用性,適合小型項目的快速構建。
前面兩種開發模式下大部分WEB應用都是將邏輯代碼和數據呈現代碼混在一起。為了強制性將邏輯代碼和數據呈現代碼分離,MVC模式使用模型進行邏輯處理和數據處理,視圖負責數據顯示,控制器負責調度業務邏輯和響應策略。
在MVC模式的指導思想下又逐步發展出Struts等JavaEE框架。他們雖然實現了數據呈現代碼和業務邏輯代碼的分離,但最終在數據呈現代碼里還是混合了HTML代碼和Java代碼或者相關的Java標簽庫,在數據呈現代碼中存在前后端數據的耦合。
前后端數據耦合會給開發帶來一系列問題:
前后端數據耦合在一起帶來的直接問題吉居士對開發人員的要求會更高。首先,開發人員需要同時熟練掌握HTML、CSS、Javascript等前端技術和后段的服務器技術。如果某一方面的技能稍弱,就可能導致開發人員的工作無法順利完成。
前后端數據耦合會增加開發過程中的開發成本。前端代碼混合后端代碼會降低代碼的可讀性,如果后期需求發生變化,后端數據變更會對前端代碼產生很大的影響。在開發過程中經常出現前端工作需要等待后端工作完成后才能展開,開發效率低。
前端JSP代碼第一次運行時會轉換成Servlet后再編譯執行,其后每次執行都會先請求Servlet,然后再由Servlet輸出成HTML代碼。運行效率比直接執行HTML代碼低上很多。
以前的JavaWEB應用常使用JSP作為視圖層展示數據,因為用戶并發訪問量不高,所以對性能要求并不是很高。隨著互聯網的飛速發展,對于WEB應用的訪問性能要求是越來越高,因此原來前后端耦合在一起的模式已經逐漸不能滿足性能要求,因此需找一種解耦的方式,來大幅度提升負載能力。
減少前后端數據耦合的基本思路是在通過前端服務器上的HTML頁面,使用Javascript發送異步請求的方式,對后端服務器代碼進行調用,后端服務器代碼使用JSON數據進行交互。
將HTML、CSS、Javascript等靜態資源放在前端服務器上,Java代碼放在后端服務器上,實現前端內容和后端內容在物理服務器上的分離。當前端服務器接收到瀏覽器請求時,前端服務器代碼通過Javascript發送一個異步請求交給后端服務器,后端服務器接收到請求后完成相應的權限判斷,數據庫訪問、業務邏輯等等操作后,將執行結果通過JSON的方式進行返回。前端服務器接收JSON數據后根據內容填充頁面再最終返回給瀏覽器。
原來MVC思想中的Controller的角色不再由Java代碼承擔,而是由前端的Javascript代碼負責對視圖View和后臺Model的調用。前后端服務器分離后,在業務場景需要的時候可以針對前端或者后端服務器通過擴展集群的方式快速提高系統響應能力。前后端數據解耦后,可以很好的解決前后端分工協調的問題,將更多的控制調度邏輯交給前端服務器代碼來處理,而后端服務器則可以側重業務邏輯本身,比如提供API接口,進行權限控制以及進行運算工作。
在開發環節,通過搭建Nodejs服務器,前端開發人員可以利用插件,實現本地開發然后將請求轉發給后端服務器。前端在開發過程中可以與后端開發分離,通過模擬的方式實現業務場景。后端開發人員只需要按照約定的API實現對應格式的JSON數據返回就可以了,不用去關心前端實現效果如何。前后端之間可以同時進行,不用相互等待,開發效率高。同時前后端分離后如果出現異常也可以將異常產生的范圍縮小,方便測試排查。
總結:降低前后端數據耦合可以為項目開發維護帶來很多好處。首先,前端代碼不再含有后端代碼,提高了前端代碼的可讀性,降低了前后端的耦合性。其次,前后端數據耦合減少使得開發人員的工作明確,前后端開發人員不需要相互等待進度,提高了開發效率。最終,由于數據耦合減少,提高了代碼的可維護性,減少后期代碼維護成本。開發者可以根據項目情況靈活選擇方案,使用合適的前后端數據耦合方式。