一、概述
Web應(yīng)用架構(gòu)可以劃分為兩大子系統(tǒng):前端子系統(tǒng)和后臺(tái)子系統(tǒng)。
前端子系統(tǒng):
1.基礎(chǔ)技術(shù):Html/Javascript/CSS/Flash
2.開發(fā)框架:jQuery,Extjs,Flex等;
后臺(tái)子系統(tǒng):
1.基礎(chǔ)技術(shù):JavaServlet;
2.開發(fā)框架:Struts,Spring,Hibernate,ibatis等;
3.應(yīng)用服務(wù)器:Tomcat/Jetty
編程模型:B/S模型??蛻舳讼蚍?wù)器端發(fā)送請(qǐng)求,服務(wù)器經(jīng)過處理后返回響應(yīng),然后客戶端根據(jù)響應(yīng)及需求繪制前端展現(xiàn)。
在用戶客戶端和實(shí)際提供功能的Web服務(wù)器之間還可能存在著代理服務(wù)器,負(fù)載均衡服務(wù)器,不過那些屬于錦上添花的事物,暫時(shí)不在考慮范圍內(nèi)。
客戶端應(yīng)用理念:客戶端承擔(dān)大量的交互邏輯及渲染工作,服務(wù)器端主要是處理請(qǐng)求和返回?cái)?shù)據(jù)。
前后端系統(tǒng)耦合:客戶端和服務(wù)器端各自處理自己內(nèi)部的子系統(tǒng)耦合;而客戶端與服務(wù)器端的耦合簡化為一個(gè)通信與數(shù)據(jù)通道。該通道用來傳輸通信請(qǐng)求和返回?cái)?shù)據(jù)。
請(qǐng)求通信:采用Http/Tcp協(xié)議
數(shù)據(jù)通道:采用Json,xml,文本字符串,字節(jié)。內(nèi)部系統(tǒng)一般采用Json作為數(shù)據(jù)交換格式;系統(tǒng)間的互操作則采用XML來規(guī)范;文本字符串是最一般的形式,字節(jié)是最底層的形式。
二、架構(gòu)演變
最輕的架構(gòu):jQuery+Servlet+ajax在客戶端使用jQuery發(fā)送ajax請(qǐng)求給Java服務(wù)端的Servlet進(jìn)行處理,Servlet僅僅返回?cái)?shù)據(jù)給客戶端進(jìn)行渲染。
該架構(gòu)有效地分離了前端展示和后臺(tái)請(qǐng)求處理,同時(shí)又保持了最輕的復(fù)雜性,只需要學(xué)會(huì)編寫Servlet及使用jQuery,就能構(gòu)建簡單的應(yīng)用。
如果只是做個(gè)人創(chuàng)意演示,可以采用該架構(gòu),快速實(shí)現(xiàn)自己的創(chuàng)意功能。Servlet是Javaweb應(yīng)用的基礎(chǔ)技術(shù),jQuery則是前端開發(fā)的簡單易用的利器。
后臺(tái)架構(gòu)演變:
1.邏輯與頁面的分離:JSP/Servlet
JSP實(shí)現(xiàn)了頁面邏輯與外觀的分離,但是,前端子系統(tǒng)與后臺(tái)子系統(tǒng)仍然是緊密耦合的;前端設(shè)計(jì)人員實(shí)際上只需要服務(wù)端返回的數(shù)據(jù),就可設(shè)計(jì)出非常專業(yè)的界面顯示。
2.MVC架構(gòu):Struts2(含Servlet,MVC)+JDBC
用Servlet來添加服務(wù)器功能是基本的選擇,但在web.xml中配置大量的Servlet卻不是最佳的選擇。
Struts2在服務(wù)端實(shí)現(xiàn)了更豐富的MVC模式,將本來由應(yīng)用決定的控制器從web容器中分離。
3.SSH架構(gòu):Struts2(含Servlet,MVC)+Spring(Ioc)+Hibernate(ORM,對(duì)象-關(guān)系映射)
通常,應(yīng)用系統(tǒng)中需要預(yù)先創(chuàng)建一些單例對(duì)象,比如Controller,Service,Dao,線程池等,可以引入SpringIoc來有效地創(chuàng)建、管理和推送這些對(duì)象;使用Hibernate來實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫的行與面向?qū)ο蟮膶傩灾g的映射與聯(lián)接,以更好地簡化和管理應(yīng)用系統(tǒng)的數(shù)據(jù)庫操作。SSH可以說是JavaWeb應(yīng)用系統(tǒng)開發(fā)的三劍客。
4.SI架構(gòu):SpringMVC(含Servlet,Ioc,MVC,Rest)+iBatis(Semi-ORM)
過于復(fù)雜的架構(gòu)會(huì)將人搞暈。因此,在適應(yīng)需求的情況下,盡量選擇簡單的架構(gòu),是明智之選。這種架構(gòu)使用面向資源的理念,著重使用Spring作為MVC及應(yīng)用基礎(chǔ)服務(wù)設(shè)施,同時(shí)使用iBatis來實(shí)現(xiàn)更簡單靈活的ORM映射,使之在可以理解和維護(hù)的范圍內(nèi)。
前端架構(gòu):
1.Flash架構(gòu):Flex+jQuery+JSP
這是一種比較傳統(tǒng)的前端架構(gòu),采用同步模式,F(xiàn)lex承擔(dān)大量的頁面渲染工作,并采用AMF協(xié)議與Java端進(jìn)行通信,而JSP則可以用于更快速的頁面顯示。優(yōu)點(diǎn)是:經(jīng)過考驗(yàn)的結(jié)構(gòu),通常是值得信賴的;缺點(diǎn)是,由于采用同步模式,在交互效果上可能不夠流暢,需要進(jìn)行比較耗時(shí)的編譯過程;此外,F(xiàn)lex基于瀏覽器插件運(yùn)行,在調(diào)試方面有些麻煩。
2.MVC架構(gòu):Extjs+jQuery
這是一種比較現(xiàn)代的前端架構(gòu),采用異步模式,Extjs4可以實(shí)現(xiàn)前端子系統(tǒng)的MVC分離,對(duì)于可維護(hù)性是非常不錯(cuò)的支持;此外,jQuery可以作為有效的補(bǔ)充。
優(yōu)點(diǎn):異步,快速,對(duì)于企業(yè)內(nèi)部的后臺(tái)管理系統(tǒng)是非常好的選擇。
缺點(diǎn):Extjs4的可定制性、可適應(yīng)性可能難以適應(yīng)各種特殊的需求,需要用其它組件來補(bǔ)充,比如大數(shù)據(jù)量的繪制。對(duì)于互聯(lián)網(wǎng)應(yīng)用,速度可能是致命傷。
三、架構(gòu)的選擇
不要去詢問哪種架構(gòu)更好,更需要做的是清晰地定位項(xiàng)目目標(biāo),根據(jù)自己的具體情況來選擇和定制架構(gòu)。反復(fù)地嘗試、觀察和改進(jìn),反復(fù)磨煉技藝,這樣才有助于設(shè)計(jì)水平的提升。
架構(gòu)的選擇通常有四種關(guān)注點(diǎn):
1.適用性:是否適合你的項(xiàng)目需求。架構(gòu)有大有小,小項(xiàng)目用小架構(gòu),大項(xiàng)目用大架構(gòu)。
2.可擴(kuò)展性:該架構(gòu)在需要添加新功能時(shí),是否能夠以常量的成本添加到現(xiàn)有系統(tǒng)中,所做的改動(dòng)在多大程度上會(huì)影響現(xiàn)有功能的實(shí)現(xiàn)(基本不影響,還是要大面積波及)。
3.便利性:使用該架構(gòu)是否易于開發(fā)功能和擴(kuò)展功能,學(xué)習(xí)、開發(fā)和測試成本有多大。
4.復(fù)雜性:使用該架構(gòu)后,維護(hù)起來的成本有多大。你自然希望能夠?qū)懸粭l語句做很多事,使用各種成熟的組件是正確的方式,同時(shí),在項(xiàng)目中混雜各種組件,也會(huì)提升理解和維護(hù)系統(tǒng)的復(fù)雜度。便利性和復(fù)雜性需要達(dá)到較好的平衡。
特殊的關(guān)注點(diǎn):
譬如,應(yīng)用需要支持高并發(fā)的情況,需要建立一個(gè)底層的并發(fā)基礎(chǔ)設(shè)施,并向上層提供簡單易用的接口,屏蔽其復(fù)雜性。
四、架構(gòu)演進(jìn)的基本手段
架構(gòu)并不是一成不變的,在做出最初的架構(gòu)之后,隨著開發(fā)的具體情況和需求的變更,需要對(duì)最初架構(gòu)做出變更和改進(jìn)。
架構(gòu)演進(jìn)的基本手段:
一致性,隔離與統(tǒng)一管理,螺旋式重構(gòu)改進(jìn),消除重復(fù),借鑒現(xiàn)有方案。
1.一致性:確保使用統(tǒng)一模式來處理相同或相似的功能;解決一次,使用多次。
2.模塊化、隔離與統(tǒng)一管理:對(duì)于整體的應(yīng)用,分而治之,將其劃分為隔離性良好的模塊,提供必要的通信耦合;對(duì)于特定的功能模塊,采用隔離手段,將其隔離在局部統(tǒng)一管理,避免分散在系統(tǒng)的各處。
3.不斷重構(gòu)改進(jìn),一旦發(fā)現(xiàn)更好的方式,馬上替換掉原有方式。
4.盡可能重用,消除重復(fù)。
5.盡可能先借鑒系統(tǒng)中已有方案并復(fù)用之;如果有更好方案可替換之;
有一條設(shè)計(jì)準(zhǔn)則是:預(yù)先設(shè)計(jì),但不要過早設(shè)計(jì)。
意思是說,需要對(duì)需求清楚的部分進(jìn)行仔細(xì)的設(shè)計(jì),但是對(duì)于未知不清楚的需求,要堅(jiān)持去理解它,但不要過早地去做出“預(yù)測性設(shè)計(jì)”;設(shè)計(jì)必須是明確的、清晰的、有效的,不能針對(duì)含糊的東西來設(shè)計(jì)??梢栽诤笃谕ㄟ^架構(gòu)演進(jìn)來獲得對(duì)后續(xù)需求的適應(yīng)能力。
以上就是天津卓眾教育Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java框架自學(xué)視頻教程下載:應(yīng)用開發(fā)框架”的內(nèi)容,希望對(duì)大家有幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。