JavaWeb應用開發架構淺談

來源:互聯網
上載者:User

本文就我所經曆和使用過的技術和架構, 討論 Java / Javascript 技術組合構成的Web 應用程式架構。


一、 概述

Web 應用程式架構可以劃分為兩大子系統:前端子系統和後檯子系統。 

前端子系統:

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

2.     開發架構: jQuery, Extjs , Flex 等;

後檯子系統:

1.     基礎技術: Java Servlet;

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

3.     應用伺服器: Tomcat / Jetty 


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

富用戶端應用理念: 用戶端承擔大量的互動邏輯及渲染工作,伺服器端主要是處理請求和返回資料。

前後端系統耦合: 用戶端和伺服器端各自處理自己內部的子系統耦合;而用戶端與伺服器端的耦合簡化為一個通訊與資料通道。該通道用來傳輸通訊請求和返回資料;

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

資料通道: 採用 Json, xml , 文本字串,位元組。 內部系統一般採用 Json 作為資料交換格式;系統間的互操作則採用XML 來規範; 文本字串是最一般的形式, 位元組是最底層的形式。

 


二、 架構演變

最輕的架構: 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 的可定製性、可適應性可能難以適應各種特殊的需求,需要用其它組件來補充, 比如大資料量的繪製。對於互連網應用, 速度可能是致命傷。

 

三、  架構的選擇

       不要去詢問哪種架構更好, 更需要做的是清晰地定位項目目標,根據自己的具體情況來選擇和定製架構。反覆地嘗試、觀察和改進,反覆磨鍊技藝,這樣才有助於設計水平的提升。

架構的選擇通常有四種關注點:

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

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

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

4.     複雜性: 使用該架構後, 維護起來的成本有多大。你自然希望能夠寫一條語句做很多事,使用各種成熟的組件是正確的方式,同時,在項目中混雜各種組件,也會提升理解和維護系統的複雜度。便利性和複雜性需要達到較好的平衡;

 

特殊的關注點:

譬如,應用需要支援高並發的情況, 需要建立一個底層的並發基礎設施, 並向上層提供簡單易用的介面,屏蔽其複雜性。

 

四、 架構演化的基本手段

架構並不是一成不變的, 在做出最初的架構之後,隨著開發的具體情況和需求的變更, 需要對最初架構做出變更和改進。

架構演化的基本手段:

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

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

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

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

4.     儘可能重用,消除重複;

5.     儘可能先借鑒系統中已有方案並複用之;如果有更好方案可替換之;

 

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

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



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.