JavaWeb應用開發架構淺談

本文就我所經歷和使用過的技術和框架, 討論 Java / Javascript 技術組合構成的Web 應用架構。前端


1、 概述web

Web 應用架構能夠劃分爲兩大子系統:前端子系統和後臺子系統。 ajax

前端子系統:數據庫

1.     基礎技術: Html/Javascript/CSS / Flash編程

2.     開發框架: jQuery, Extjs , Flex 等;後端

後臺子系統:瀏覽器

1.     基礎技術: Java Servlet;服務器

2.     開發框架: Struts, Spring, Hibernate, ibatis 等; 架構

3.     應用服務器: Tomcat / Jetty 併發


編程模型: B/S 模型。 客戶端向服務器端發送請求, 服務器通過處理後返回響應, 而後客戶端根據響應及需求繪製前端展示。 在用戶客戶端和實際提供功能的Web 服務器之間還可能存在着代理服務器, 負載均衡服務器, 不過那些屬於錦上添花的事物,暫時不在考慮範圍內。


富客戶端應用理念: 客戶端承擔大量的交互邏輯及渲染工做,服務器端主要是處理請求和返回數據。

先後端系統耦合: 客戶端和服務器端各自處理本身內部的子系統耦合;而客戶端與服務器端的耦合簡化爲一個通訊與數據通道。該通道用來傳輸通訊請求和返回數據;


請求通訊: 採用 Http / Tcp 協議

數據通道: 採用 Json, xml , 文本字符串,字節。 內部系統通常採用 Json 做爲數據交換格式;系統間的互操做則採用XML 來規範; 文本字符串是最通常的形式, 字節是最底層的形式。

 

 


2、 架構演變

最輕的架構: jQuery + Servlet + ajax

       在客戶端使用 jQuery發送 ajax 請求給Java 服務端的 Servlet 進行處理, Servlet 僅僅返回數據給客戶端進行渲染。 該架構有效地分離了前端展現和後臺請求處理,同時又保持了最輕的複雜性, 只須要學會編寫 Servlet 及使用 jQuery , 就能構建簡單的應用。

       若是隻是作我的創意演示, 能夠採用該架構, 快速實現本身的創意功能。 Servlet 是Java web 應用的基礎技術,jQuery 則是前端開發的簡單易用的利器。

 

後臺架構演變:

Ø  邏輯與頁面的分離: JSP/Servlet 

       JSP 實現了頁面邏輯與外觀的分離,可是, 前端子系統與後臺子系統仍然是緊密耦合的; 前端設計人員實際上只須要服務端返回的數據, 就可設計出很是專業的界面顯示;

Ø  MVC 架構:Struts2(含Servlet,MVC) + JDBC

        用Servlet 來添加服務器功能是基本的選擇,但在web.xml中配置大量的 Servlet 卻不是最佳的選擇。Struts2 在服務端實現了更豐富的MVC 模式, 將原本由應用決定的控制器從web容器中分離;

Ø  SSH 架構: Struts2(含Servlet,  MVC) + Spring (Ioc) + Hibernate (ORM,對象-關係映射)

        一般, 應用系統中須要預先建立一些單例對象, 好比 Controller,  Service, Dao, 線程池等, 能夠引入 Spring Ioc 來有效地建立、管理和推送這些對象; 使用 Hibernate 來實現關係數據庫的行與面向對象的屬性之間的映射與聯接, 以更好地簡化和管理應用系統的數據庫操做。SSH 能夠說是 JavaWeb應用系統開發的三劍客。

Ø  SI 架構: SpringMVC(含Servlet, Ioc, MVC, Rest) + iBatis (Semi-ORM)

        過於複雜的架構會將人搞暈。所以,在適應需求的狀況下, 儘可能選擇簡單的架構,是明智之選。 這種架構使用面向資源的理念, 着重使用Spring做爲MVC及應用基礎服務設施, 同時使用 iBatis 來實現更簡單靈活的ORM映射, 使之在能夠理解和維護的範圍內。

 

前端架構:

1.     Flash 架構: Flex + jQuery + JSP

       這是一種比較傳統的前端架構,採用同步模式, Flex 承擔大量的頁面渲染工做, 並採用AMF協議與Java端進行通訊, 而JSP 則能夠用於更快速的頁面顯示。優勢是: 通過考驗的結構, 一般是值得信賴的; 缺點是, 因爲採用同步模式, 在交互效果上可能不夠流暢, 須要進行比較耗時的編譯過程; 此外, Flex 基於瀏覽器插件運行,在調試方面有些麻煩。 

2.     MVC 架構: Extjs + jQuery

       這是一種比較現代的前端架構, 採用異步模式, Extjs4 能夠實現前端子系統的MVC 分離, 對於可維護性是很是不錯的支持; 此外, jQuery 能夠做爲有效的補充。優勢: 異步, 快速, 對於企業內部的後臺管理系統是很是好的選擇。 缺點: Extjs4 的可定製性、可適應性可能難以適應各類特殊的需求,須要用其它組件來補充, 好比大數據量的繪製。對於互聯網應用, 速度多是致命傷。

 

3、  架構的選擇

       不要去詢問哪一種架構更好, 更須要作的是清晰地定位項目目標,根據本身的具體狀況來選擇和定製架構。反覆地嘗試、觀察和改進,反覆磨鍊技藝,這樣纔有助於設計水平的提高。

架構的選擇一般有四種關注點:

1.     適用性: 是否適合你的項目需求。 架構有大有小, 小項目用小架構, 大項目用大架構;

2.     可擴展性: 該架構在須要添加新功能時,是否可以以常量的成本添加到現有系統中, 所作的改動在多大程度上會影響現有功能的實現(基本不影響,仍是要大面積波及);

3.     便利性: 使用該架構是否易於開發功能和擴展功能, 學習、開發和測試成本有多大;

4.     複雜性: 使用該架構後, 維護起來的成本有多大。你天然但願可以寫一條語句作不少事,使用各類成熟的組件是正確的方式,同時,在項目中混雜各類組件,也會提高理解和維護系統的複雜度。便利性和複雜性須要達到較好的平衡;

 

特殊的關注點:

譬如,應用須要支持高併發的狀況, 須要創建一個底層的併發基礎設施, 並向上層提供簡單易用的接口,屏蔽其複雜性。

 

4、 架構演進的基本手段

架構並非一成不變的, 在作出最初的架構以後,隨着開發的具體狀況和需求的變動, 須要對最初架構作出變動和改進。

架構演進的基本手段:

一致性, 隔離與統一管理, 螺旋式重構改進, 消除重複, 借鑑現有方案

1.     一致性: 確保使用統一模式來處理相同或類似的功能; 解決一次, 使用屢次;

2.     模塊化、隔離與統一管理: 對於總體的應用, 分而治之,將其劃分爲隔離性良好的模塊,提供必要的通訊耦合;對於特定的功能模塊, 採用隔離手段,將其隔離在局部統一管理,避免分散在系統的各處;

3.     不斷重構改進, 一旦發現更好的方式, 立刻替換掉原有方式;

4.     儘量重用,消除重複;

5.     儘量先借鑑系統中已有方案並複用之;若是有更好方案可替換之;

 

       有一條設計準則是: 預先設計, 但不要過早設計。

       意思是說, 你須要對需求清楚的部分進行仔細的設計, 可是對於未知不清楚的需求,要堅持去理解它,但不要過早地去作出「預測性設計」; 設計必須是明確的、清晰的、有效的, 不能針對含糊的東西來設計。能夠在後期經過架構演進來得到對後續需求的適應能力。

相關文章
相關標籤/搜索