![軟件工程-第8章-Web軟件工程PPT_第1頁](http://file4.renrendoc.com/view/ec4291ec2e4808abec2adb50841e2c6c/ec4291ec2e4808abec2adb50841e2c6c1.gif)
![軟件工程-第8章-Web軟件工程PPT_第2頁](http://file4.renrendoc.com/view/ec4291ec2e4808abec2adb50841e2c6c/ec4291ec2e4808abec2adb50841e2c6c2.gif)
![軟件工程-第8章-Web軟件工程PPT_第3頁](http://file4.renrendoc.com/view/ec4291ec2e4808abec2adb50841e2c6c/ec4291ec2e4808abec2adb50841e2c6c3.gif)
![軟件工程-第8章-Web軟件工程PPT_第4頁](http://file4.renrendoc.com/view/ec4291ec2e4808abec2adb50841e2c6c/ec4291ec2e4808abec2adb50841e2c6c4.gif)
![軟件工程-第8章-Web軟件工程PPT_第5頁](http://file4.renrendoc.com/view/ec4291ec2e4808abec2adb50841e2c6c/ec4291ec2e4808abec2adb50841e2c6c5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
軟件工程8Web軟件工程Web軟件工程
隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,應(yīng)用Web(網(wǎng)頁)的系統(tǒng)越來越多,Web在很多領(lǐng)域都有著巨大的需求?;赪eb的應(yīng)用是指使用Internet瀏覽器管理用戶界面所表現(xiàn)的內(nèi)容,而業(yè)務(wù)邏輯和數(shù)據(jù)庫都部署在服務(wù)器上。典型的基于Web系統(tǒng)的組件至少部署在三層(即Web客戶端、Web服務(wù)器和數(shù)據(jù)庫服務(wù)器)以上。對于基于Web的應(yīng)用程序來說,常在客戶端采用JavaApplet(Java寫的小程序)和JavaScript(Java腳本語言)兩種技術(shù),在服務(wù)器端采用Servlet和動態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn)JSP兩種技術(shù)。Servlet可以產(chǎn)生超文本標(biāo)記語言(HTML)。HTML頁面的Java代碼由Web服務(wù)器管理,代碼通過JSP支持。Web服務(wù)器提供HTML客戶端瀏覽器和數(shù)據(jù)庫服務(wù)器之間的通信通道。Servlet一旦被加載到服務(wù)器中,就能夠鏈接數(shù)據(jù)庫并為多個客戶端維護(hù)這個鏈接。而JSP是在HTML頁面中嵌入Java代碼,用來管理頁面的動態(tài)內(nèi)容并提供數(shù)據(jù),運行之前JSP是要動態(tài)編譯的。Web軟件工程8Web軟件工程Web軟件工程
本章從基于Web應(yīng)用的角度,探討和介紹Web系統(tǒng)的設(shè)計模式,并分析基于Web的系統(tǒng)和應(yīng)用(WebApp)設(shè)計的6個主要步驟。界面設(shè)計:創(chuàng)建定義用戶界面的總體布局和交互機(jī)制;美學(xué)設(shè)計:建立最終用戶所關(guān)注的外觀和感覺;內(nèi)容設(shè)計:將從分析模型中獲取的信息作為設(shè)計內(nèi)容對象及它們之間的關(guān)系基礎(chǔ);體系結(jié)構(gòu)設(shè)計:重點關(guān)注所有內(nèi)容對象和功能的總體超媒體結(jié)構(gòu);構(gòu)件設(shè)計:表示了WebApp功能元素的詳細(xì)內(nèi)部結(jié)構(gòu);導(dǎo)航設(shè)計:定義最終用戶是怎樣對超媒體結(jié)構(gòu)進(jìn)行導(dǎo)航的。本章最后介紹了WebApp的測試方法?!锉菊轮攸c:Web的層次結(jié)構(gòu);Web的客戶端和服務(wù)器所使用的技術(shù);Web軟件的設(shè)計模式,模型-視圖-控制器模式;WebApp設(shè)計方法;WebApp測試方法。Web軟件工程Contents目錄Web軟件的特性01Web的層次結(jié)構(gòu)02客戶端層可用技術(shù)03Web服務(wù)器層使用的技術(shù)04Contents目錄Web軟件設(shè)計模式05WebApp設(shè)計06WebApp測試0701Web軟件的特性Web是圖形化的和易于導(dǎo)航的Web與平臺無關(guān)Web是分布式的Web是動態(tài)的Web是交互的數(shù)據(jù)集可重復(fù)利用8.1Web軟件的特性
隨著科技的不斷發(fā)展,網(wǎng)絡(luò)的發(fā)展更是飛速,Web已從Web1.0發(fā)展到Web3.0。2007年,谷歌首席執(zhí)行官EricSchmidt在出席首爾數(shù)字論壇時,曾談到“對于Web3.0,我的預(yù)測將是拼湊在一起的應(yīng)用程序,帶有一些主要特征:應(yīng)用程序相對較小、數(shù)據(jù)處于Cloud中、應(yīng)用程序可以在任何設(shè)備(PC或者移動電話)上運行、應(yīng)用程序的速度非??觳⒛苓M(jìn)行很多自定義,此外應(yīng)用程序會像病毒一樣地擴(kuò)散(社交網(wǎng)絡(luò)、電子郵件等)?!?.1Web軟件的特性Web是圖形化的和易于導(dǎo)航的Web非常流行的一個很重要的原因,就在于它可以在一頁上同時顯示色彩豐富的圖形和文本。在Web之前,Internet上的信息只有文本形式。而Web可以提供將圖形、音頻、視頻信息集合于一體的特性。同時,Web是非常易于導(dǎo)航的,只需要從一個超鏈接跳到另一個超鏈接,就可以在各頁、各站點之間進(jìn)行轉(zhuǎn)換瀏覽了。1Web與平臺無關(guān)無論用戶的系統(tǒng)平臺是什么,Windows,UNIX,Linux,MacOSX,iOS,Android或其他,都可以通過Internet訪問WWW。也就是說,瀏覽WWW對系統(tǒng)平臺沒有什么限制。對WWW的訪問是通過一種叫做瀏覽器(Browser)的軟件實現(xiàn)的,如IE(InternetExplorer),Chrome,F(xiàn)irefox,Safari等。2Web軟件的特性可以概括為:圖形化的和易于導(dǎo)航的(Navigate)、與平臺無關(guān)、分布式的、動態(tài)的和交互的。8.1Web軟件的特性Web是分布式的大量的圖形、音頻和視頻信息會占用相當(dāng)大的磁盤空間,應(yīng)用Web時信息可以放在不同的站點上,只需要在瀏覽器中指明站點就可以了。這樣可使物理上并不一定在一個站點的信息,在邏輯上一體化,而從用戶角度來看這些信息是一體的。3Web是動態(tài)的由于各Web站點的信息包含了站點本身的信息,信息的提供者可以經(jīng)常對站上的信息進(jìn)行更新,例如某個協(xié)議的發(fā)展?fàn)顩r、公司的廣告等。因此,Web站點上的信息是動態(tài)的、經(jīng)常更新的。4Web是交互的Web的交互性首先表現(xiàn)在它的超鏈接上,用戶的瀏覽順序和所到站點完全由自己決定。另外,通過表單的形式可以從服務(wù)器方獲得動態(tài)的信息,用戶通過填寫Form表單向服務(wù)器提交請求,服務(wù)器可以根據(jù)用戶的請求返回相應(yīng)信息。58.1Web軟件的特性數(shù)據(jù)集可重復(fù)利用近年來網(wǎng)絡(luò)技術(shù)在不斷地發(fā)展,Web也在不斷發(fā)展。Web3.0使得結(jié)構(gòu)化數(shù)據(jù)集可重復(fù)利用,其具體表現(xiàn)在:無處不聯(lián)網(wǎng):寬帶網(wǎng)的普及和發(fā)展,移動通信設(shè)備的互聯(lián)網(wǎng)接入,實現(xiàn)了無處不聯(lián)網(wǎng)。網(wǎng)絡(luò)計算:“軟件就是服務(wù)”的商業(yè)模型,Web服務(wù)互用性,分布式計算,網(wǎng)格計算和效用計算(又稱“云計算”)。開放技術(shù):開放API和協(xié)議,開放數(shù)據(jù)格式,開源軟件平臺和開放數(shù)據(jù)(如創(chuàng)作共享,開放數(shù)據(jù)許可)。6開放身份,OpenID,開放名聲,跨域身份和個人數(shù)據(jù)。智能網(wǎng)絡(luò),語義網(wǎng)技術(shù),如資源描述框架、網(wǎng)絡(luò)實體語言、SWRL(SemanticWebRuleLanguage,以語義的方式呈現(xiàn)規(guī)則的一種語言)、SPARQL(SimpleProtocolandRDFQueryLanguage,為一種用于描述Web資源的標(biāo)記語言RDF〔ResourceDescriptionFramework〕所開發(fā)的一種查詢語言和數(shù)據(jù)獲取協(xié)議)等語義應(yīng)用程序平臺。分布式數(shù)據(jù)庫,萬維數(shù)據(jù)庫(WorldWideDatabase,由語義網(wǎng)的技術(shù)實現(xiàn))。智能應(yīng)用程序,普通語言的處理,機(jī)器學(xué)習(xí),機(jī)器推理,自主代理。02Web的層次結(jié)構(gòu)兩層C/S結(jié)構(gòu)三層C/S結(jié)構(gòu)四層C/S結(jié)構(gòu)B/S結(jié)構(gòu)8.2Web的層次結(jié)構(gòu)早期網(wǎng)絡(luò)采用集中式管理,通過一臺物理上與宿主機(jī)相連接的非智能終端,來實現(xiàn)宿主機(jī)上的應(yīng)用程序。20世紀(jì)80年代,這種集中式網(wǎng)絡(luò)逐漸被分布式計算機(jī)網(wǎng)絡(luò)所取代。分布式網(wǎng)絡(luò)系統(tǒng)是一個多處理器系統(tǒng),它由許多分布在不同的處理器上并行運行的進(jìn)程組成,可以提高系統(tǒng)的性能。分布式網(wǎng)絡(luò)結(jié)構(gòu)有以下幾種:二層C/S結(jié)構(gòu)、三層C/S結(jié)構(gòu)、四層C/S結(jié)構(gòu)、B/S結(jié)構(gòu)。8.2Web的層次結(jié)構(gòu)8.2.1兩層C/S結(jié)構(gòu)12345①用戶使用簡單,直觀;②編程、調(diào)試和維護(hù)費用低;③系統(tǒng)內(nèi)部負(fù)荷可以做到比較均衡,資源利用率較高;④允許在一個客戶機(jī)上運行不同計算機(jī)平臺上的多種應(yīng)用;⑤系統(tǒng)易于擴(kuò)展,可用性較好,對用戶需求變化的適應(yīng)性好。3
二層網(wǎng)絡(luò)結(jié)構(gòu)客戶機(jī)/服務(wù)器(C/S)系統(tǒng)最重要的特征是:它不是一個主從環(huán)境,而是一個平等的環(huán)境,即C/S系統(tǒng)中各計算機(jī)在不同的場合既可能是客戶機(jī),又可能是服務(wù)器。C/S系統(tǒng)有很多優(yōu)點:8.2Web的層次結(jié)構(gòu)8.2.1兩層C/S結(jié)構(gòu)瘦客戶機(jī)模型:如果所有的形式邏輯和業(yè)務(wù)邏輯均駐留在客戶端(Client),而Server則成為數(shù)據(jù)庫服務(wù)器,負(fù)責(zé)各種數(shù)據(jù)的處理和維護(hù),因此Server變得很“瘦”,被稱為“瘦服務(wù)器”(ThinServer)。而瘦客戶機(jī)模型與瘦服務(wù)器模型相反,它將繁重的處理任務(wù)都放在服務(wù)器和網(wǎng)絡(luò)上,由服務(wù)器負(fù)責(zé)所有的計算。因此,瘦客戶機(jī)模型的缺點是將增加客戶機(jī)和服務(wù)器之間的網(wǎng)絡(luò)流量。胖客戶機(jī)模型:胖客戶機(jī)(FatClient)模型與瘦客戶機(jī)模型相反,需要在客戶端運行龐大的應(yīng)用程序,由客戶機(jī)上的軟件實現(xiàn)應(yīng)用邏輯和系統(tǒng)用戶的交互。胖客戶機(jī)模型下,服務(wù)器只負(fù)責(zé)對數(shù)據(jù)的管理。傳統(tǒng)C/S結(jié)構(gòu)8.2Web的層次結(jié)構(gòu)8.2.1兩層C/S結(jié)構(gòu)二層C/S體系結(jié)構(gòu)由前端客戶機(jī)、后端服務(wù)器和網(wǎng)絡(luò)三部分組成,如右圖所示。8.2Web的層次結(jié)構(gòu)8.2.1兩層C/S結(jié)構(gòu)前端客戶機(jī)01二層C/S體系結(jié)構(gòu)的前端客戶機(jī)負(fù)責(zé)接收用戶發(fā)出的請求,并向數(shù)據(jù)庫服務(wù)器發(fā)出請求??蛻魴C(jī)通常是獨立的子系統(tǒng),同一時刻可能有多個客戶機(jī)程序并發(fā)運行。8.2Web的層次結(jié)構(gòu)8.2.1兩層C/S結(jié)構(gòu)后端服務(wù)器02二層C/S體系結(jié)構(gòu)的后端服務(wù)器負(fù)責(zé)提供完善的安全保護(hù)以及對數(shù)據(jù)完整性進(jìn)行處理,并允許多個用戶同時訪問一個數(shù)據(jù)庫。從功能的角度來說,客戶端負(fù)責(zé)與用戶交互,管理用戶界面和表示邏輯,具體包括管理各種界面對象,驗證數(shù)據(jù)的完整性和有效性,并將客戶的請求發(fā)送給服務(wù)器端,同時將服務(wù)器處理的結(jié)果輸出到客戶端。服務(wù)器端在功能上實現(xiàn)數(shù)據(jù)的存取,并根據(jù)用戶的需求提供服務(wù)。8.2Web的層次結(jié)構(gòu)8.2.1兩層C/S結(jié)構(gòu)網(wǎng)絡(luò)03客戶機(jī)和服務(wù)器通過網(wǎng)絡(luò)連接。圖8-2所示為二層C/S結(jié)構(gòu)的數(shù)據(jù)處理流程圖??蛻魴C(jī)通過Web瀏覽器向服務(wù)器發(fā)出請求,服務(wù)器處理后將結(jié)果返回給客戶瀏覽器端。在整個處理過程中,無論是胖客戶機(jī)模型還是瘦客戶機(jī)模型,都必須將任務(wù)映射到兩個系統(tǒng)上,即客戶端和服務(wù)器端。8.2Web的層次結(jié)構(gòu)8.2.1兩層C/S結(jié)構(gòu)隨著企業(yè)規(guī)模的日益擴(kuò)大,軟件的復(fù)雜性也越來越大,二層C/S結(jié)構(gòu)出現(xiàn)了很多缺點,例如開發(fā)成本越來越高,軟件移植困難大,軟件的維護(hù)和升級管理越來越困難等。因此,出現(xiàn)了三層C/S體系結(jié)構(gòu)。8.2Web的層次結(jié)構(gòu)8.2.2三層C/S結(jié)構(gòu)三層C/S體系結(jié)構(gòu)如圖8-3所示。在三層模式中,含有客戶端、數(shù)據(jù)庫服務(wù)器和一個Web服務(wù)器。Web服務(wù)器既作為一個瀏覽服務(wù)器,又作為一個應(yīng)用服務(wù)器,系統(tǒng)將整個應(yīng)用邏輯放在Web服務(wù)器上,而只有表示層存在于客戶機(jī)上。這種結(jié)構(gòu)中,無論是應(yīng)用的HTML頁還是JavaApplet,都是運行時動態(tài)下載的,只需隨機(jī)地增加中間層即應(yīng)用邏輯的服務(wù),即可滿足擴(kuò)充系統(tǒng)的需要。用此系統(tǒng)可以使用較少的資源建立起具有很強(qiáng)伸縮性的系統(tǒng),這正是網(wǎng)絡(luò)計算模式帶來的重大改進(jìn)。圖8-3三層C/S體系結(jié)構(gòu)8.2Web的層次結(jié)構(gòu)8.2.2三層C/S結(jié)構(gòu)與二層C/S結(jié)構(gòu)相比,三層C/S結(jié)構(gòu)具有更靈活的硬件系統(tǒng)構(gòu)成,對于各個層可以選擇與其處理負(fù)荷和處理特性相適應(yīng)的硬件。合理地分割三層結(jié)構(gòu)并使各部分相對地獨立,可以使系統(tǒng)的結(jié)構(gòu)變得簡單清晰,這樣就提高了程序的可維護(hù)性。在三層C/S結(jié)構(gòu)中,應(yīng)用的各層可以并行開發(fā),各層也可以選擇各自最適合的開發(fā)語言,有利于變更和維護(hù)應(yīng)用技術(shù)規(guī)范。8.2Web的層次結(jié)構(gòu)8.2.2三層C/S結(jié)構(gòu)三層C/S結(jié)構(gòu)將整個系統(tǒng)分成表示層、應(yīng)用邏輯層和數(shù)據(jù)存儲層3個部分,其數(shù)據(jù)處理流程如圖8-4所示。8.2Web的層次結(jié)構(gòu)8.2.2三層C/S結(jié)構(gòu)應(yīng)用邏輯層相當(dāng)于應(yīng)用的本體,它將具體的業(yè)務(wù)處理邏輯地編入程序中。表示層在應(yīng)用邏輯層和數(shù)據(jù)存儲層之間的數(shù)據(jù),交互時要盡可能簡潔。應(yīng)用邏輯層在三層C/S結(jié)構(gòu)中,表示層是應(yīng)用的用戶接口部分,它擔(dān)負(fù)著用戶與應(yīng)用間的對話功能。用于檢查用戶從鍵盤等輸入設(shè)備所輸入的數(shù)據(jù),顯示應(yīng)用輸出的數(shù)據(jù)。為使用戶能直觀地進(jìn)行操作,一般要使用圖形用戶接口(GraphicalUserInterface,GUI),使操作簡單、易學(xué)易用。在變更用戶接口時,只需改寫顯示控制和數(shù)據(jù)檢查程序,而不影響其他兩層,檢查的內(nèi)容也只限于數(shù)據(jù)的形式和值的范圍,不包括有關(guān)業(yè)務(wù)本身的處理邏輯。表示層8.2Web的層次結(jié)構(gòu)8.2.2三層C/S結(jié)構(gòu)數(shù)據(jù)存儲層就是數(shù)據(jù)庫管理系統(tǒng)(DatabaseManagementSystem,DBMS),負(fù)責(zé)管理對數(shù)據(jù)庫數(shù)據(jù)的讀寫。DBMS必須能迅速執(zhí)行大量數(shù)據(jù)的更新和檢索?,F(xiàn)在數(shù)據(jù)存儲層的主流是關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RelationalDatabaseManagementSystem,RDBMS)。因此,現(xiàn)在一般從應(yīng)用邏輯層傳送到數(shù)據(jù)層的實現(xiàn)大都使用SQL語言。數(shù)據(jù)存儲層8.2Web的層次結(jié)構(gòu)8.2.2三層C/S結(jié)構(gòu)以商品購買為例,在圖8-4中,表示層是應(yīng)用的最高層,它顯示與商品瀏覽、購買、購物車內(nèi)容服務(wù)相關(guān)的信息,并將結(jié)果輸出到瀏覽器/客戶端層和網(wǎng)絡(luò)上的所有其他層,來與應(yīng)用架構(gòu)的其他層進(jìn)行通信。應(yīng)用邏輯層是從表示層剝離出來的,作為單獨的一層,它通過執(zhí)行細(xì)節(jié)處理來控制應(yīng)用的功能。數(shù)據(jù)存儲層包括數(shù)據(jù)庫服務(wù)器,用于對信息進(jìn)行存儲和檢索。8.2Web的層次結(jié)構(gòu)8.2.2三層C/S結(jié)構(gòu)數(shù)據(jù)存儲層保證數(shù)據(jù)獨立于應(yīng)用邏輯層,將數(shù)據(jù)作為單獨的一層,還可以提高程序的可擴(kuò)展性和性能。Web瀏覽器(表示層)向中間層(應(yīng)用邏輯層)發(fā)送請求,中間層通過查詢、更新數(shù)據(jù)庫(數(shù)據(jù)存儲層)并響應(yīng)此請求。三層架構(gòu)中一條最基本的規(guī)則是:表示層不直接與數(shù)據(jù)存儲層通信。在三層架構(gòu)中,所有通信都必須經(jīng)過應(yīng)用邏輯層。8.2Web的層次結(jié)構(gòu)8.2.2三層C/S結(jié)構(gòu)三層C/S結(jié)構(gòu)的優(yōu)勢(1)利用單一的訪問點,可以在任何地方訪問站點的數(shù)據(jù)庫;(3)所有的信息,不論其所基于的平臺,都可用相同的界面訪問;(5)具有良好的開放性,系統(tǒng)的可擴(kuò)充性良好;(7)系統(tǒng)管理簡單,可支持異種數(shù)據(jù)庫,有很高的可用性。(4)可跨平臺操作,減少整個系統(tǒng)的成本,維護(hù)升級十分方便;(2)對于各種信息源,不論是文本還是圖形都采用相同的界面;(6)進(jìn)行嚴(yán)密的安全管理;8.2Web的層次結(jié)構(gòu)8.2.2三層C/S結(jié)構(gòu)三層C/S結(jié)構(gòu)各層間的通信效率如果不高,即使分配給各層的硬件能力很強(qiáng),從整體來說也達(dá)不到所要求的性能。在設(shè)計時,必須考慮三層間的通信方法、通信頻度及數(shù)據(jù)量,這和提高各層的獨立性一樣,是三層C/S結(jié)構(gòu)的關(guān)鍵問題。8.2Web的層次結(jié)構(gòu)8.2.3四層C/S結(jié)構(gòu)由于三層結(jié)構(gòu)解決方案的通信效率問題以及擴(kuò)展性還不夠高,因此提出了一種四層解決方案,該方案在Web服務(wù)器和數(shù)據(jù)庫之間使用了一層中間件(通常稱為應(yīng)用服務(wù)器)。應(yīng)用服務(wù)器負(fù)責(zé)將應(yīng)用編程接口(ApplicationProgrammingInterface,API)提供給業(yè)務(wù)邏輯和業(yè)務(wù)流程以供程序使用,可以根據(jù)需要引入其他的Web服務(wù)器。此外,應(yīng)用服務(wù)器可以與多個數(shù)據(jù)源通信,包括數(shù)據(jù)庫、大型機(jī)以及其他舊式系統(tǒng)。8.2Web的層次結(jié)構(gòu)8.2.3四層C/S結(jié)構(gòu)圖8-5描繪了一種簡單的四層結(jié)構(gòu)。在圖8-5中,Web瀏覽器(表示層)向中間層(邏輯層)發(fā)送請求,依次調(diào)用位于應(yīng)用層的應(yīng)用服務(wù)器所提供的API,應(yīng)用層通過查詢、更新數(shù)據(jù)庫(數(shù)據(jù)存儲層)來響應(yīng)該請求。8.2Web的層次結(jié)構(gòu)8.2.3四層C/S結(jié)構(gòu)
在圖8-5中,如果用戶激活Web瀏覽器并連接到某個網(wǎng)址,位于邏輯層的Web服務(wù)器將從文件系統(tǒng)中加載腳本,并將其傳遞給腳本引擎,腳本引擎負(fù)責(zé)解析并執(zhí)行腳本。腳本調(diào)用位于應(yīng)用層的應(yīng)用服務(wù)器所提供的應(yīng)用程序編程接口(API)。應(yīng)用服務(wù)器使用數(shù)據(jù)庫連接器打開存儲層連接,并對數(shù)據(jù)庫執(zhí)行SQL語句。數(shù)據(jù)庫將數(shù)據(jù)返回給數(shù)據(jù)庫連接器,應(yīng)用服務(wù)器在將數(shù)據(jù)返回給Web服務(wù)器之前先執(zhí)行相關(guān)的應(yīng)用或業(yè)務(wù)邏輯規(guī)則。Web服務(wù)器再將數(shù)據(jù)以HTML格式返回給表示層的用戶的Web瀏覽器。用戶的Web瀏覽器以HTML呈現(xiàn)并借助代碼的圖形化表示展現(xiàn)給用戶。所有操作都將在數(shù)秒內(nèi)完成,并且對用戶是透明的。8.2Web的層次結(jié)構(gòu)8.2.3四層C/S結(jié)構(gòu)Web軟件的客戶端即表示層,一般采用瀏覽器支持的腳本語言(如JavaScript)實現(xiàn);Web服務(wù)器端即邏輯層,一般采用JSP,PHP,JavaServlet或ASP.NET等實現(xiàn);應(yīng)用服務(wù)器采用的技術(shù)包括SpringFramework,EJB,.NET等;數(shù)據(jù)庫服務(wù)器即數(shù)據(jù)存儲層,一般采用SQLServer,Oracle等技術(shù)。8.2Web的層次結(jié)構(gòu)8.2.4B/S結(jié)構(gòu)隨著因特網(wǎng)的興起,人們提出了瀏覽器/服務(wù)器(Browser/Server,B/S)結(jié)構(gòu)。從本質(zhì)上說,B/S結(jié)構(gòu)也是一種Client/Server結(jié)構(gòu),它可看做是C/S結(jié)構(gòu)在Web上應(yīng)用的特例,如圖8-6所示為B/S結(jié)構(gòu)。8.2Web的層次結(jié)構(gòu)8.2.4B/S結(jié)構(gòu)
B/S結(jié)構(gòu)主要是利用了不斷成熟的Web瀏覽器技術(shù):結(jié)合瀏覽器的多種腳本語言和ActiveX(IE瀏覽器的插件)技術(shù),用通用瀏覽器實現(xiàn)原來需要復(fù)雜專用軟件才能實現(xiàn)的強(qiáng)大功能,同時節(jié)約了開發(fā)成本。
B/S結(jié)構(gòu)的使用越來越多,特別是由需求推動了AJAX技術(shù)的發(fā)展。AJAX是一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。它的程序也能在客戶端電腦上進(jìn)行部分處理,從而大大地減輕了服務(wù)器的負(fù)擔(dān),并增加了交互性,能進(jìn)行局部實時刷新。
B/S最大的優(yōu)點就是可以在任何地方進(jìn)行操作而不用安裝任何專門的軟件,只要有一臺能上網(wǎng)的電腦就能使用,客戶端零安裝、零維護(hù),系統(tǒng)的擴(kuò)展非常容易。8.2Web的層次結(jié)構(gòu)8.2.4B/S結(jié)構(gòu)維護(hù)和升級方式簡單軟件系統(tǒng)的改進(jìn)和升級越發(fā)頻繁,B/S架構(gòu)的產(chǎn)品明顯體現(xiàn)出系統(tǒng)改進(jìn)和升級更為方便的特性。對企業(yè)來說需要提高效率和減少管理人員的工作量,而B/S架構(gòu)的所有的客戶端只是瀏覽器,不需任何的維護(hù)。無論用戶的規(guī)模有多大,有多少分支機(jī)構(gòu),都不會增加任何維護(hù)升級的工作量,所有的操作只需要針對服務(wù)器進(jìn)行;如果是異地應(yīng)用,只需要把服務(wù)器連接專網(wǎng)即可實現(xiàn)遠(yuǎn)程維護(hù)、升級和共享。所以客戶機(jī)越來越“瘦”,而服務(wù)器越來越“胖”是將來信息化發(fā)展的主流方向,可節(jié)約人力、物力、時間和費用。11.B/S的特點8.2Web的層次結(jié)構(gòu)8.2.4B/S結(jié)構(gòu)應(yīng)用服務(wù)器運行數(shù)據(jù)負(fù)荷較重由于B/S架構(gòu)管理軟件只安裝在服務(wù)器端,網(wǎng)絡(luò)管理人員只需要管理服務(wù)器就行了,用戶界面主要的應(yīng)用邏輯在服務(wù)器端,完全通過WWW瀏覽器實現(xiàn),極少部分應(yīng)用邏輯在前端實現(xiàn),所有的客戶端只有瀏覽器,網(wǎng)絡(luò)管理人員只需要做硬件維護(hù)。但是,應(yīng)用服務(wù)器運行數(shù)據(jù)負(fù)荷較重,一旦發(fā)生服務(wù)器“崩潰”等問題,后果不堪設(shè)想。因此,許多單位都備有數(shù)據(jù)庫存儲服務(wù)器,以防萬一。3成本降低,選擇更多B/S體系結(jié)構(gòu)提供了異種機(jī)、異種網(wǎng)、異種應(yīng)用服務(wù)的聯(lián)機(jī)、聯(lián)網(wǎng)、統(tǒng)一服務(wù)的開放性基礎(chǔ)。28.2Web的層次結(jié)構(gòu)8.2.4B/S結(jié)構(gòu)B/S體系結(jié)構(gòu)的系統(tǒng)擴(kuò)展能力差,安全性難以控制。02B/S體系結(jié)構(gòu)缺乏對動態(tài)頁面的支持能力,沒有集成有效的數(shù)據(jù)庫處理能力。01B/S體系結(jié)構(gòu)的數(shù)據(jù)提交一般以頁面為單位,數(shù)據(jù)的動態(tài)交互性不強(qiáng),不利于在線事務(wù)處理應(yīng)用。04采用B/S體系結(jié)構(gòu)的應(yīng)用系統(tǒng),在數(shù)據(jù)查詢等響應(yīng)速度上,要遠(yuǎn)遠(yuǎn)低于C/S體系結(jié)構(gòu)。032.B/S的缺點03客戶端層可用的技術(shù)基本HTML腳本語言AppletAJAX8.3客戶端層可用的技術(shù)客戶端是指在工作站上的用戶通過輸入向服務(wù)器發(fā)出請求,用戶能夠在工作站上觀察到系統(tǒng)執(zhí)行的結(jié)果。本節(jié)將介紹Web客戶端層所使用的技術(shù),包括HTML、腳本語言、Applet和AJAX。8.3客戶端層可用的技術(shù)8.3.1基本HTML
HTML(HyperTextMarkupLanguage,即超文本標(biāo)記語言),是一種用來制作超文本文檔的簡單標(biāo)記語言。HTML是由Web的發(fā)明者TimBerners-Lee和同事DanielW.Connolly于1990年創(chuàng)立的一種標(biāo)記式語言。1997年,萬維網(wǎng)聯(lián)盟組織編寫和制定了新的HTML3.2標(biāo)準(zhǔn),從而使HTML文檔能夠在不同的瀏覽器和操作平臺中正確顯示。目前HTML已經(jīng)發(fā)展到5.0版本。
HTML(超文本標(biāo)記語言)是一種建立網(wǎng)頁文件的語言,它透過標(biāo)記式的指令(Tag),將圖片、文字、聲音、動畫、影視等內(nèi)容顯示出來。HTML文檔主要包括文檔內(nèi)容、文檔標(biāo)記和HTML超鏈接三部分。文檔內(nèi)容是在計算機(jī)屏幕上顯示的所有信息,包括文本、圖片等;文檔標(biāo)記是插在文檔中的HTML編碼,如<html>、</html>、<head>、</head>這些稱為標(biāo)記(Tag),它規(guī)定了文檔中的每一部分的格式和屏幕上顯示的方式;HTML超鏈接負(fù)責(zé)把當(dāng)前文件鏈接到同一文檔的另一位置、同一主機(jī)的其他文檔或因特網(wǎng)上其他的文檔,最終實現(xiàn)將因特網(wǎng)中的各種文檔彼此鏈接起來,形成一個全球性的信息資源庫。8.3客戶端層可用的技術(shù)8.3.1基本HTMLHTML總體的基本結(jié)構(gòu)為:<html><head><title>網(wǎng)頁的標(biāo)題</title></head><body>在網(wǎng)頁中要顯示的內(nèi)容</body></html>網(wǎng)頁設(shè)計常用的軟件有Dreamweaver和FrontPage。但要在網(wǎng)頁中加入圖片、視頻、音頻等其他元素,還必須配合使用Photoshop,F(xiàn)lash,AdobeAudition和JavaScript等相關(guān)元素的處理軟件。8.3客戶端層可用的技術(shù)8.3.2腳本語言
腳本語言用在HTML文檔中,用于豐富用戶的交互,是一種介于HTML語言和VB,Java等高級語言之間的語言。常用的腳本語言有VBScript和JavaScript等語言,默認(rèn)的腳本語言為VBScript語言。JavaScript的原名叫LiveScript,是NetScape公司在引入Sun公司有關(guān)Java的程序設(shè)計概念后,重新設(shè)計而更名的。JavaScript是一種可以嵌入HTML文檔的,基于對象并具有某些面向?qū)ο筇卣鞯哪_本語言;是一種基于對象(Object-Based)和事件驅(qū)動(EventDriven),由瀏覽器解釋執(zhí)行的,具有安全性能的客戶端腳本語言。通過使用HTML,JavaApplet來實現(xiàn),在一個Web頁面中鏈接多個對象,與Web客戶交互作用,從而可以開發(fā)客戶端的應(yīng)用程序等。8.3客戶端層可用的技術(shù)8.3.2腳本語言<HTML><Head> <ScriptLanguage="JavaScript"> document.write("hello,world"); </Script></Head></HTML>
在B/S程序中,為了均衡負(fù)載,減輕服務(wù)器的計算負(fù)擔(dān),凡是不需要服務(wù)器程序做的工作,可盡量交給客戶端程序(如JavaScript程序)去做。用HTML標(biāo)記構(gòu)造出用戶界面,例如用戶通過界面輸入數(shù)據(jù),向瀏覽器請求數(shù)據(jù)等操作都可以用JavaScript程序來完成。在用戶輸入數(shù)據(jù),或者是輸入完畢,將數(shù)據(jù)向服務(wù)器提交的時候,由JavaScript程序來完成對數(shù)據(jù)的檢驗和驗證等任務(wù)。8.3客戶端層可用的技術(shù)8.3.2腳本語言JavaScript的特點①解釋性:由瀏覽器直接解釋執(zhí)行;②用于客戶端;③安全性:不允許直接訪問本地硬盤;④簡單易用:腳本式語言最大的優(yōu)點是易學(xué)易用,是一種輕量級的程序語言;⑤動態(tài)性:可以直接對用戶或客戶的輸入作出響應(yīng),無須經(jīng)過Web服務(wù)程序,它對用戶輸入的響應(yīng),是采用以事件驅(qū)動的方式進(jìn)行的;⑥跨平臺性:只要是可以解釋JavaScript的瀏覽器都可以執(zhí)行,和操作系統(tǒng)無關(guān)。8.3客戶端層可用的技術(shù)8.3.2腳本語言(3)執(zhí)行:與HTML文檔配合,將其插入到HTML文檔中,然后通過瀏覽器執(zhí)行HTML文檔即可。(1)校驗用戶輸入的內(nèi)容:用于用戶輸入內(nèi)容的校驗;(2)編寫JavaScript腳本:可以使用任何一種文字編輯器來編寫,如Dreamweaver,EditPlus,UltraEdit等;ACBJavaScript的作用主要有:8.3客戶端層可用的技術(shù)8.3.3AppletApplet就是用Java語言編寫的一些應(yīng)用程序,它們可以直接嵌入到網(wǎng)頁中,并能夠產(chǎn)生特殊的效果。當(dāng)用戶訪問帶有Applet的網(wǎng)頁時,Applet被下載到用戶計算機(jī)上執(zhí)行,但前提是用戶使用的是支持Java的網(wǎng)絡(luò)瀏覽器。由于Applet是在用戶計算機(jī)上執(zhí)行的,因此它的執(zhí)行速度不受網(wǎng)絡(luò)帶寬或MODEM存取速度的限制,用戶可以更好地欣賞網(wǎng)頁上Applet產(chǎn)生的多媒體效果。在JavaApplet中,可以實現(xiàn)圖形繪制、字體和顏色控制、動畫和聲音的插入、人機(jī)交互及網(wǎng)絡(luò)交流等功能。8.3客戶端層可用的技術(shù)8.3.4AJAXAJAX(1)基于可擴(kuò)展超文本標(biāo)記語言(ExtensibleHyperTextMarkupLanguage,XHTML)和層疊樣式表(CascadingStyleSheets,CSS)的Web標(biāo)準(zhǔn)頁面開發(fā)技術(shù);(2)文檔對象模型(DocumentObjectModel,DOM)動態(tài)顯示及交互技術(shù);(3)擴(kuò)展樣式表轉(zhuǎn)換語言(ExtensibleStylesheetLanguageTransformations,XSLT)結(jié)構(gòu)化數(shù)據(jù)技術(shù);(4)可擴(kuò)展標(biāo)記語言(ExtensibleMarkupLanguage,XML)HttpRequest異步數(shù)據(jù)查詢、檢索技術(shù);(5)直譯式腳本語言JavaScript。
AJAX全稱為“AsynchronousJavaScriptandXML”,它是一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)的集合,其中主要包含的技術(shù)有:8.3客戶端層可用的技術(shù)8.3.4AJAX傳統(tǒng)的Web應(yīng)用允許用戶填寫表單,當(dāng)用戶提交表單時,就向Web服務(wù)器發(fā)送一個請求。服務(wù)器接收并處理傳來的表單,然后返回一個新的網(wǎng)頁。這個做法浪費了許多帶寬,因為在前后兩個頁面中的大部分HTML代碼往往是相同的。由于每次應(yīng)用的交互都需要向服務(wù)器發(fā)送請求,應(yīng)用的響應(yīng)時間就依賴于服務(wù)器的響應(yīng)時間。這導(dǎo)致了用戶界面的響應(yīng)比本地應(yīng)用慢得多。與傳統(tǒng)Web不同的是,AJAX應(yīng)用可以僅向服務(wù)器發(fā)送并取回必需的數(shù)據(jù),它使用簡單對象訪問協(xié)議(SimpleObjectAccessProtocol,SOAP)或其他一些基于XML的WebService接口,并在客戶端采用JavaScript處理來自服務(wù)器的響應(yīng)。因為在服務(wù)器和瀏覽器之間交換的數(shù)據(jù)大量減少,所以響應(yīng)更快。同時很多的處理工作可以在發(fā)出請求的客戶端機(jī)器上完成,因此Web服務(wù)器的處理時間也減少了。8.3客戶端層可用的技術(shù)8.3.4AJAX結(jié)構(gòu)化程序設(shè)計01
①采用異步模式;03
③AJAX引擎在客戶端運行,承擔(dān)了一部分本來由服務(wù)器承擔(dān)的工作,從而減少了大用戶量下的服務(wù)器負(fù)載。02②優(yōu)化了瀏覽器和服務(wù)器之間的傳輸,減少不必要的數(shù)據(jù)往返,減少了帶寬占用;
AJAX應(yīng)用程序的優(yōu)勢在于以下:04Web服務(wù)器層使用的技術(shù)ServletJSP8.4Web服務(wù)器層使用的技術(shù)
8.4.1ServletWeb服務(wù)器層管理Web客戶端與應(yīng)用邏輯之間的連接。本節(jié)將介紹兩種技術(shù):Servlet和JSP技術(shù)。Servlet是一種獨立于操作系統(tǒng)平臺和網(wǎng)絡(luò)傳輸協(xié)議的服務(wù)器端的Java應(yīng)用程序,它用來擴(kuò)展服務(wù)器的功能,可以生成動態(tài)的Web頁面。Servlet最大的用途是通過動態(tài)響應(yīng)客戶機(jī)請求來擴(kuò)展服務(wù)器功能。Servlet不是從命令行啟動的,而是由包含Java虛擬機(jī)的Web服務(wù)器進(jìn)行加載。servlet8.4Web服務(wù)器層使用的技術(shù)
8.4.1ServletServlet與Applet不同之處Servlet與Applet相似之處(1)它們不是獨立的應(yīng)用程序,沒有main()方法。(2)它們不是由用戶調(diào)用,而是由另外一個應(yīng)用程序(容器)調(diào)用。(3)它們都有一個生存周期,包含init()和destroy()方法。(1)Applet運行在客戶端,具有豐富的圖形界面。(2)Servlet運行在服務(wù)器端,沒有圖形界面。8.4Web服務(wù)器層使用的技術(shù)
8.4.1ServletServlet運行在Web服務(wù)器上的Web容器里。Web容器負(fù)責(zé)管理Servlet,它裝入并初始化Servlet,管理Servlet的多個實例,并充當(dāng)請求調(diào)度器,將客戶端的請求傳遞到Servlet,并將Servlet的響應(yīng)返回給客戶端。Web容器在Servlet的使用期限結(jié)束時結(jié)束該Servlet。服務(wù)器關(guān)閉時,Web容器會從內(nèi)存中卸載和除去Servlet??蛻魴C(jī)與Servlet間沒有直接的交互。無論客戶機(jī)對Servlet的請求(即ServletRequest)還是Servlet對客戶端的響應(yīng)(即ServletResponse),都是通過Web服務(wù)器來實現(xiàn)的,大大提高了Servlet組件的可移植性。Servlet工作原理:8.4Web服務(wù)器層使用的技術(shù)
8.4.1ServletServlet基本工作流程(1)客戶機(jī)將請求發(fā)送到服務(wù)器。(2)服務(wù)器上的Web容器實例化(裝入)Servlet。(3)Web容器將請求信息發(fā)送到Servlet。(4)Servlet創(chuàng)建一個響應(yīng),并將其返回到Web容器。(5)Web容器將響應(yīng)發(fā)回客戶機(jī)。(6)服務(wù)器關(guān)閉或Servlet空閑時間超過一定限度時,調(diào)用destory()方法退出。8.4Web服務(wù)器層使用的技術(shù)
8.4.1Servlet
如右圖所示為Servlet的調(diào)用過程,當(dāng)客戶端瀏覽器向服務(wù)器請求一個Servlet時,服務(wù)器收到該請求后,首先到容器中檢索與請求匹配的Servlet實例是否已經(jīng)存在。若不存在,則Servlet容器負(fù)責(zé)加載,并實例化出該類Servlet的一個實例對象,接著容器框架負(fù)責(zé)調(diào)用該實例的init()方法來對實例做一些初始化工作,然后Servlet容器運行該實例的service()方法。若Servlet實例已經(jīng)存在,則容器框架直接調(diào)用該實例的service()方法。service()方法在運行時,自動派遣運行與用戶請求相對應(yīng)的doXX()方法來響應(yīng)用戶發(fā)起的請求。通常,每個Servlet類在容器中只存在一個實例,每當(dāng)請求到來時,則分配一條線程來處理該請求。Servlet存在?請求載入是否字節(jié)碼文件信息Servlet容器Web瀏覽器調(diào)用init(),初始化調(diào)用service()運行doXX()實例化響應(yīng)8.4Web服務(wù)器層使用的技術(shù)
8.4.2JSP客戶端瀏覽器首次被訪問?請求服務(wù)器JSP文件Servlet類Java編譯器JVMJSP引擎轉(zhuǎn)化為是響應(yīng)否JSP(JavaServerPages)是Servlet技術(shù)的變形。JSP的調(diào)用方法如右圖所示。8.4Web服務(wù)器層使用的技術(shù)
8.4.2JSP當(dāng)客戶端瀏覽器向服務(wù)器請求一個JSP頁面時,服務(wù)器收到該請求后,首先檢查所請求的這個JSP文件內(nèi)容(代碼)是否已經(jīng)被更新,或者是否為JSP文件創(chuàng)建后第一次被訪問。如果是第一次被訪問的JSP文件,就會在服務(wù)器端的JSP引擎作用下轉(zhuǎn)化為一個Servlet類的Java源代碼文件。然后,Servlet類會在Java編譯器的作用下被編譯成一個字節(jié)碼文件,并裝載到JVM(JavaVirtualMachine,Java虛擬機(jī))解釋執(zhí)行。剩下的就等同于Servlet的處理過程了。如果被請求的JSP文件內(nèi)容(代碼)沒有被修改,那么它的處理過程等同于一個Servlet的處理過程,即直接由服務(wù)器檢索出與之對應(yīng)的Servlet實例來處理。8.4Web服務(wù)器層使用的技術(shù)
8.4.2JSPJSP本質(zhì)是一個Servlet,它的運行需要容器的支持。在JSP和Servlet文件中都可以編寫Java和HTML代碼,不同的是,Servlet雖然可以動態(tài)地生成頁面內(nèi)容,但更偏向于邏輯的控制,而JSP更加偏向于頁面視圖的展現(xiàn)。05Web軟件設(shè)計模式觀察者模式組合模式工廠方法模式和策略模式模型-視圖-控制器模式裝飾者模式8.5Web軟件設(shè)計模式設(shè)計模式最早是由建筑師ChristopherAlexander提出來的,它認(rèn)為優(yōu)雅的設(shè)計是有章可循的,提煉并復(fù)用前人的設(shè)計原則,可以容易地實現(xiàn)優(yōu)美的設(shè)計。目前設(shè)計模式已經(jīng)被廣泛應(yīng)用于多種領(lǐng)域的軟件和構(gòu)造中,許多先進(jìn)的軟件中大量采用了軟件設(shè)計模式的概念。所謂設(shè)計模式,是指從某個具體的形式中得到的一種抽象,在非任意的環(huán)境中該形式不斷地重復(fù)出現(xiàn)。本節(jié)介紹的Web軟件設(shè)計模式包括觀察者模式、組合模式、工廠方法模式、策略模式、模型-視圖-控制器(MVC)模式、裝飾者模式。8.5Web軟件設(shè)計模式
8.5.1觀察者模式觀察者模式(Observer)完美地將觀察者和被觀察的對象分離開。例如,用戶界面可以作為一個觀察者,業(yè)務(wù)數(shù)據(jù)是被觀察者,用戶界面觀察業(yè)務(wù)數(shù)據(jù)的變化,發(fā)現(xiàn)數(shù)據(jù)變化后,就顯示在界面上。觀察者模式在模塊之間劃定了清晰的界限,提高了應(yīng)用程序的可維護(hù)性和重用性。觀察者模式是發(fā)布-訂閱體系結(jié)構(gòu)風(fēng)格的一種應(yīng)用。觀察者模式定義了對象之間一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知自動更新,讓多個觀察者對象同時監(jiān)聽某一個主題對象。8.5Web軟件設(shè)計模式8.5.1觀察者模式1抽象主題角色
把所有對觀察者對象的引用保存在一個集合中,每個抽象主題角色都可以有任意數(shù)量的觀察者。抽象主題提供一個接口,可以增加和刪除觀察者角色。一般用一個抽象類和接口來實現(xiàn)。2抽象觀察者角色
為所有具體的觀察者定義一個接口,在得到主題的通知時更新自己。3具體主題角色
在具體主題內(nèi)部狀態(tài)改變時,給所有登記過的觀察者發(fā)出通知。具體主題角色通常用一個子類實現(xiàn)。4具體觀察者角色
該角色實現(xiàn)抽象觀察者角色所要求的更新接口,以便使本身的狀態(tài)與主題的狀態(tài)相協(xié)調(diào)。具體觀察者角色通常用一個子類實現(xiàn)。如果需要,具體觀察者角色可以保存一個指向具體主題角色的引用。觀察者模式的組成:8.5Web軟件設(shè)計模式
8.5.1觀察者模式
觀察者模式有很多實現(xiàn)方式,從根本上說,該模式必須包含兩個角色:觀察者和被觀察對象。如果業(yè)務(wù)數(shù)據(jù)是被觀察對象,用戶界面是觀察者。觀察者和被觀察者之間存在“觀察”的邏輯關(guān)聯(lián),當(dāng)被觀察者發(fā)生改變的時候,觀察者就會觀察到這樣的變化,并且做出相應(yīng)的響應(yīng)。如果在用戶界面、業(yè)務(wù)數(shù)據(jù)之間使用這樣的觀察過程,可以確保界面和數(shù)據(jù)之間劃清界限,假定應(yīng)用程序的需求發(fā)生變化,需要修改界面的表現(xiàn),只需要重新構(gòu)建一個用戶界面,業(yè)務(wù)數(shù)據(jù)不需要發(fā)生變化。8.5Web軟件設(shè)計模式8.5.1觀察者模式(1)觀察者模式在被觀察者和觀察者之間建立一個抽象的耦合。被觀察者角色所知道的只是一個具體觀察者列表,每一個具體觀察者都符合一個抽象觀察者的接口。被觀察者并不認(rèn)識任何一個具體觀察者,它只知道它們都有一個共同的接口,該接口在DocumentObserver抽象類中進(jìn)行聲明。(2)觀察者模式支持廣播通訊。被觀察者會向所有登記過的觀察者發(fā)出通知。設(shè)計、使用觀察者模式的優(yōu)點觀察者模式的實現(xiàn)方式:
(1)如果一個被觀察者對象有很多直接和間接的觀察者的話,將所有的觀察者都通知到需花費很多時間。
(2)如果在被觀察者之間有循環(huán)依賴的話,被觀察者會觸發(fā)它們之間進(jìn)行循環(huán)調(diào)用,導(dǎo)致系統(tǒng)崩潰。在使用觀察者模式時要特別注意這一點。
(3)如果對觀察者的通知是通過另外的線程進(jìn)行異步投遞的話,系統(tǒng)必須保證投遞是可達(dá)性的,也就是要保證所有的觀察者都能收到通知。
(4)雖然觀察者模式可以隨時使觀察者知道所觀察的對象發(fā)生了變化,但是觀察者模式?jīng)]有相應(yīng)的機(jī)制使觀察者知道所觀察的對象是怎么發(fā)生變化的。觀察者模式的缺點:8.5Web軟件設(shè)計模式8.5.1觀察者模式觀察者模式的實現(xiàn)方式:8.5Web軟件設(shè)計模式
8.5.1觀察者模式通知撤銷注冊注冊觀察者模式的過程(2)通知如果被觀察對象發(fā)生了某種變化,要從容器中得到所有注冊過的觀察者,將變化通知注冊過的觀察者。(1)注冊觀察者將自己注冊到被觀察對象中,被觀察對象將觀察者存放在一個容器里。(3)撤銷注冊觀察者告訴被觀察者要撤銷觀察,被觀察者從容器中將觀察者去除。觀察者模式的過程:8.5Web軟件設(shè)計模式
8.5.1觀察者模式觀察者將自己注冊到被觀察者的容器中時,被觀察者不應(yīng)該過問觀察者的具體類型,而是應(yīng)該使用觀察者的接口。這樣的優(yōu)點是:假定程序中還有別的觀察者,那么只要這個觀察者也是相同的接口實現(xiàn)即可。一個被觀察者可以對應(yīng)多個觀察者,當(dāng)被觀察者發(fā)生變化的時候,它可以將消息通知給所有的觀察者?;诮涌?,而不是具體的實現(xiàn),這一點為程序提供了更大的靈活性。8.5Web軟件設(shè)計模式
8.5.1觀察者模式觀察的注意點:實現(xiàn)觀察者模式的時候要注意,觀察者和被觀察對象之間的互動關(guān)系不能體現(xiàn)成類之間的直接調(diào)用,否則就將使觀察者和被觀察對象之間緊密地耦合起來,從根本上違反面向?qū)ο蟮脑O(shè)計的原則。無論是觀察者“觀察”觀察對象,還是被觀察者將自己的改變“通知”觀察者,都不應(yīng)該直接調(diào)用。8.5Web軟件設(shè)計模式
8.5.2組合模式組合模式是指一個對象可以通過其他對象組合而成。這是一種對象的樹狀結(jié)構(gòu)形式。這種模式的好處是將各單個對象和組合對象看做統(tǒng)一的組合對象。即組合多個對象形成樹形結(jié)構(gòu),來表示具有“整體-部分”關(guān)系的層次結(jié)構(gòu)。組合模式對單個對象(即葉子對象)和組合對象(即容器對象)的使用具有一致性,組合模式又可以稱為“整體-部分”(Part-Whole)模式,它是一種對象結(jié)構(gòu)型模式。8.5Web軟件設(shè)計模式
8.5.2組合模式抽象構(gòu)件(Component)它可以是接口或抽象類,為葉子構(gòu)件和容器構(gòu)件對象聲明接口,在該角色中可以包含所有子類共有行為的聲明和實現(xiàn)。在抽象構(gòu)件中定義了訪問及管理它的子構(gòu)件的方法,如增加子構(gòu)件、刪除子構(gòu)件、獲取子構(gòu)件等。1葉子構(gòu)件(Leaf)它在組合結(jié)構(gòu)中表示葉子節(jié)點對象,葉子節(jié)點沒有子節(jié)點,它實現(xiàn)了在抽象構(gòu)件中定義的行為。對于那些訪問及管理子構(gòu)件的方法,可以通過異常等方式進(jìn)行處理。2容器構(gòu)件(Composite)它在組合結(jié)構(gòu)中表示容器節(jié)點對象,容器節(jié)點包含子節(jié)點,其子節(jié)點可以是葉子節(jié)點,也可以是容器節(jié)點,它提供一個集合用于存儲子節(jié)點,實現(xiàn)了在抽象構(gòu)件中定義的行為,包括那些訪問及管理子構(gòu)件的方法,在其業(yè)務(wù)方法中可以遞歸調(diào)用其子節(jié)點的業(yè)務(wù)方法。3在組合模式結(jié)構(gòu)圖中包含如下3個角色:抽象構(gòu)件、葉子構(gòu)件和容器構(gòu)件。8.5Web軟件設(shè)計模式
8.5.2組合模式
組合模式的關(guān)鍵是定義了一個抽象構(gòu)件類,它既可以代表葉子,又可以代表容器,而客戶端針對該抽象構(gòu)件類進(jìn)行編程,不需要知道它到底表示的是葉子還是容器,可以對其進(jìn)行統(tǒng)一處理。同時,容器對象與抽象構(gòu)件類之間還建立一個聚合關(guān)聯(lián)關(guān)系,在容器對象中既可以包含葉子,也可以包含容器,以此實現(xiàn)遞歸組合,形成一個樹形結(jié)構(gòu)。如果不使用組合模式,客戶端代碼將過多地依賴于容器對象復(fù)雜的內(nèi)部實現(xiàn)結(jié)構(gòu),容器對象內(nèi)部實現(xiàn)結(jié)構(gòu)的變化將引起客戶代碼的頻繁變化,帶來了代碼維護(hù)復(fù)雜、可擴(kuò)展性差等弊端。組合模式的引入將在一定程度上解決這些問題。8.5Web軟件設(shè)計模式
8.5.3工廠方法模式和策略模式工廠方法模式定義了基類的子類用于創(chuàng)建產(chǎn)品??蛻糁恍柚阑惖拇嬖?,它通過調(diào)用基類的方法創(chuàng)建對象(產(chǎn)品),但是基類并不知道如何創(chuàng)建基類,于是基類委托其子類中的覆蓋方法進(jìn)行調(diào)用。8.5Web軟件設(shè)計模式
8.5.3工廠方法模式和策略模式
在編程中,產(chǎn)品類的實例化有時候是比較復(fù)雜和多變的,通過工廠模式,將產(chǎn)品的實例化封裝起來,使得調(diào)用者根本無需關(guān)心產(chǎn)品的實例化過程,只需依賴工廠即可得到自己想要的產(chǎn)品??梢允勾a結(jié)構(gòu)清晰,有效地封裝變化。
如果使用工廠模式,調(diào)用者只關(guān)心產(chǎn)品的接口就可以了,至于產(chǎn)品的具體實現(xiàn),調(diào)用者根本無需關(guān)心。即使變更了具體的實現(xiàn),對調(diào)用者來說也沒有任何影響。對調(diào)用者屏蔽具體的產(chǎn)品類。
產(chǎn)品類的實例化通常是很復(fù)雜的,它需要依賴很多的類,而這些類對于調(diào)用者來說根本無需知道。如果使用了工廠方法,只要實例化產(chǎn)品類,然后交給調(diào)用者使用。對調(diào)用者來說,產(chǎn)品所依賴的類都是透明的。降低耦合度。
工廠方法模式的主要優(yōu)點:8.5Web軟件設(shè)計模式
8.5.3工廠方法模式和策略模式工廠接口工廠接口是工廠方法模式的核心,與調(diào)用者直接交互用來提供產(chǎn)品。在實際編程中,有時候也會使用一個抽象類來作為與調(diào)用者交互的接口,其本質(zhì)上是一樣的。1工廠實現(xiàn)在編程中,工廠實現(xiàn)決定如何實例化產(chǎn)品,是實現(xiàn)擴(kuò)展的途徑,需要有多少種產(chǎn)品,就需要有多少個具體的工廠實現(xiàn)。2
工廠方法模式有4個要素:8.5Web軟件設(shè)計模式
8.5.3工廠方法模式和策略模式產(chǎn)品實現(xiàn)實現(xiàn)產(chǎn)品接口的具體類,決定了產(chǎn)品在客戶端中的具體行為。4產(chǎn)品接口產(chǎn)品接口的主要目的是定義產(chǎn)品的規(guī)范,所有的產(chǎn)品實現(xiàn)都必須遵循產(chǎn)品接口定義的規(guī)范。產(chǎn)品接口是調(diào)用者最為關(guān)心的,產(chǎn)品接口定義的優(yōu)劣直接決定了調(diào)用者代碼的穩(wěn)定性。同樣,產(chǎn)品接口也可以用抽象類來代替。如果是采用抽象類設(shè)計實現(xiàn),就需要用子類繼承,但要注意,最好不要違反里氏替換原則。里氏替換原則就是子類可以擴(kuò)展父類的功能,但不能改變父類原有的功能,即子類中可以增加自己特有的方法,子類可以實現(xiàn)父類的抽象方法,但不能覆蓋父類的非抽象方法。38.5Web軟件設(shè)計模式
8.5.3工廠方法模式和策略模式策略模式是工廠方法模式的一種變形。它提供了一種用多個行為中的一個行為來配置一個類的方法,即實現(xiàn)某一個功能有多種算法或者策略。我們可以根據(jù)環(huán)境或者條件的不同,選擇不同的算法或者策略來完成該功能。即將這些算法寫到一個類中,在該類中提供多個方法,每一個方法對應(yīng)一個具體的算法。當(dāng)不同的行為堆砌在一個類中時,用條件語句選擇所需的行為??蛻舳吮仨氈浪械牟呗灶?,并自行決定使用哪一個策略類。那么一個客戶要選擇一個合適的策略就必須知道這些策略到底有何不同。策略模式工廠模式是創(chuàng)建型模式,它關(guān)注對象創(chuàng)建,提供創(chuàng)建對象的接口,讓對象的創(chuàng)建與具體使用的客戶無關(guān)。策略模式是對象行為型模式,它關(guān)注行為和算法的封裝,定義一系列的算法,把每一個算法封裝起來,并且使它們可相互替換,使得算法可獨立于它的客戶而變化。8.5Web軟件設(shè)計模式
8.5.4模型-視圖-控制器模式模型-視圖-控制器(MVC)模式是模型(Model)、視圖(View)和控制器(Controller)的縮寫。MVC是一種軟件設(shè)計典范,它用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個部件里面,在改進(jìn)和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務(wù)邏輯。8.5Web軟件設(shè)計模式
8.5.4模型-視圖-控制器模式模型(Model)表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則,負(fù)責(zé)業(yè)務(wù)流程的處理。在MVC的3個部件中,模型擁有最多的處理業(yè)務(wù)。模型接收視圖請求的數(shù)據(jù),進(jìn)行相應(yīng)的處理并返回最終的處理結(jié)果。被模型返回的數(shù)據(jù)是中立的,也就是說模型與數(shù)據(jù)格式無關(guān),采用這種機(jī)制使一個模型能為多個視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需要寫一次就可以被多個視圖重用,所以減少了代碼編寫的重復(fù),減少了系統(tǒng)開發(fā)的工作量。模型M018.5Web軟件設(shè)計模式
8.5.4模型-視圖-控制器模式視圖(View)是用戶看到并與之交互的界面。對Web應(yīng)用系統(tǒng)來說,視圖可以由HTML元素構(gòu)成,也可以由其他一些技術(shù)如XML,XHTML等來構(gòu)建。MVC可以為系統(tǒng)的一個應(yīng)用建立很多不同的視圖,在視圖中沒有真正的業(yè)務(wù)流程的處理,它對數(shù)據(jù)的操作只是數(shù)據(jù)的采集和顯示,業(yè)務(wù)流程的處理由模型來完成。視圖V028.5Web軟件設(shè)計模式
8.5.4模型-視圖-控制器模式控制器(Controller)接收用戶的輸入并調(diào)用模型和視圖對數(shù)據(jù)進(jìn)行處理,共同滿足用戶的請求??刂破鹘邮照埱蠛?,并不處理業(yè)務(wù)短信息,而是根據(jù)用戶請求選擇相應(yīng)的模型,把用戶的信息傳遞給模型,告訴模型做什么;處理完相應(yīng)的數(shù)據(jù)后,模型把結(jié)果交給控制器,控制器選擇符合要求的視圖返回給用戶??刂破鰿038.5Web軟件設(shè)計模式
8.5.4模型-視圖-控制器模式
如圖8-10(見下一頁)為MVC的工作流程,模型就是數(shù)據(jù)的倉庫,負(fù)責(zé)存取數(shù)據(jù),它獨立于視圖和控制器,既可以儲存原數(shù)據(jù),比如字符串,也可以儲存復(fù)雜的數(shù)據(jù)。視圖是用戶界面的可視化部分。視圖使用數(shù)據(jù)模型的數(shù)據(jù)來描述自己。一個視圖由動畫、用戶輸入表單、圖表、按鈕、聲音播放器或者其他需要的任何類型的用戶界面組成??刂破髫?fù)責(zé)獲取輸入內(nèi)容(例如用戶輸入請求),并將數(shù)據(jù)傳遞給模型。MVC的工作流程:8.5Web軟件設(shè)計模式
8.5.4模型-視圖-控制器模式模型M封裝功能封裝內(nèi)容對象更新請求服務(wù)器來自模型的數(shù)據(jù)將數(shù)據(jù)傳遞給模型控制器C管理用戶請求選擇模型行為選擇視圖響應(yīng)數(shù)據(jù)庫選擇視圖更新請求瀏覽器用戶端將結(jié)果反饋給用戶端用戶發(fā)出HTTP請求數(shù)據(jù)存取視圖V根據(jù)模型的數(shù)據(jù)更新并顯示控制器所選擇的視圖模型M封裝功能封裝內(nèi)容對象圖8-10MVC工作流程圖8.5Web軟件設(shè)計模式
8.5.4模型-視圖-控制器模式MVC的工作流程(1)控制器接收來自遠(yuǎn)程客戶端的HTTP請求,將其轉(zhuǎn)換為對模型的業(yè)務(wù)邏輯處理功能的調(diào)用。(2)模型進(jìn)行業(yè)務(wù)邏輯處理,在處理過程中可訪問位于后端的數(shù)據(jù)庫,處理完成后模型將結(jié)果送給控制器。(3)控制器根據(jù)模型的處理結(jié)果創(chuàng)建新的視圖、選擇其他視圖或更新已有視圖。(4)視圖在接收控制器的命令后從模型中獲取數(shù)據(jù)并生成HTTP應(yīng)答,主要內(nèi)容為HTML數(shù)據(jù)。(5)遠(yuǎn)程客戶端的Web瀏覽器接收并解析來自視圖的HTML數(shù)據(jù),呈現(xiàn)Web軟件的用戶界面。(6)當(dāng)用戶在瀏覽器的操作界面發(fā)出HTTP請求時,重復(fù)上述操作。8.5Web軟件設(shè)計模式
8.5.5裝飾者模式
裝飾者模式是在不必改變原類文件和使用繼承的情況下,動態(tài)地擴(kuò)展一個對象的功能。它是通過創(chuàng)建一個包裝對象也就是裝飾,來包裝真實的對象。裝飾者模式的關(guān)鍵是裝飾基類的每一個特征。8.5Web軟件設(shè)計模式
8.5.5裝飾者模式
類設(shè)計時要注意對擴(kuò)展開放,對修改關(guān)閉。
多用組合,少用繼承。利用繼承設(shè)計子類的行為,是在編譯時靜態(tài)決定的,而且所有的子類都會繼承到相同的行為。如果能夠利用組合的做法擴(kuò)展對象的行為,就可以在運行時動態(tài)地進(jìn)行擴(kuò)展。
裝飾者模式的設(shè)計原則:8.5Web軟件設(shè)計模式
8.5.5裝飾者模式裝飾者模式的特點(1)裝飾者和被裝飾對象有相同的超類型。(2)可以用一個或多個裝飾者包裝一個對象,各種繼承的裝飾可以應(yīng)用于同樣的對象,而它們都給原來的對象添加了一個新的外部包裝器,并增加對象的職責(zé)。(3)裝飾者可以在所委托被裝飾者的行為之前或之后,加上自己的行為,以達(dá)到特定的目的。(4)對象可以在任何時候被裝飾,所以可以在運行時動態(tài)地用你喜歡的裝飾者來裝飾對象。(5)裝飾模式中使用繼承的關(guān)鍵是想達(dá)到裝飾者和被裝飾對象的類型匹配,而不是獲得其行為。(6)裝飾者一般對組件的客戶是透明的,除非客戶程序依賴于組件的具體類型。在實際項目中可以根據(jù)需要為裝飾者添加新的行為,做到“半透明”裝飾者。8.5Web軟件設(shè)計模式
8.5.5裝飾者模式(1)裝飾者模式可以提供比繼承更多的靈活性。(2)通過使用不同的具體裝飾類以及這些裝飾類的排列組合,設(shè)計師可以創(chuàng)造出很多不同行為的組合。裝飾者模式的優(yōu)點8.5Web軟件設(shè)計模式
8.5.5裝飾者模式(1)裝飾者模式比繼承更加靈活機(jī)動的特性,同時也意味著更多的復(fù)雜性。(2)裝飾者模式會導(dǎo)致設(shè)計中出現(xiàn)許多小類,如果過度使用,會使程序變得很復(fù)雜。裝飾者模式的缺點06WebApp設(shè)計WebApp的特點及應(yīng)用類型WebApp的需求工程WebApp需求分析WebApp設(shè)計過程WebApp體系結(jié)構(gòu)設(shè)計導(dǎo)航設(shè)計8.6WebApp設(shè)計
WebApp是指基于Web的系統(tǒng)和應(yīng)用,其作用是向廣大的最終用戶發(fā)布一組復(fù)雜的內(nèi)容和功能。萬維網(wǎng)(WorldWideWeb,WWW)和因特網(wǎng)(Internet)技術(shù)將我們帶入了信息時代,在開發(fā)基于Web的系統(tǒng)和應(yīng)用(WebApp)時,需要使用規(guī)范化的方法和工具。本節(jié)將討論WebApp的特點、應(yīng)用類型、需求分析和設(shè)計方法。WWW的早期(約1990年~1995年),“Web站點”僅包含鏈接在一起的少量超文本文件,這些文件使用文本和有限的圖標(biāo)來表示信息。隨著時間的推移,一些開發(fā)工具(例如XML,Java)使HTML得到擴(kuò)展,使得Web工程師在向客戶提供信息的同時也能提供計算功能,基于Web的系統(tǒng)和應(yīng)用(即WebApp)誕生了。今天,WebApp已經(jīng)成為成熟的計算工具,不僅可以為最終用戶提供獨立的功能,而且已經(jīng)同公司數(shù)據(jù)庫和業(yè)務(wù)應(yīng)用集成在一起了。8.6WebApp設(shè)計8.6.1WebApp的特點及應(yīng)用類型1網(wǎng)絡(luò)密集型
WebApp駐留在網(wǎng)絡(luò)上,服務(wù)于不同客戶群體的需求。WebApp可以駐留在Internet上,即可以放置在內(nèi)聯(lián)網(wǎng)(實現(xiàn)組織范圍內(nèi)的通信)或外聯(lián)網(wǎng)(網(wǎng)際間通信)上。2并發(fā)性
在同一時間可能有大量用戶使用WebApp。3無法預(yù)計的負(fù)載量
WebApp的用戶數(shù)量每天都可能會有很大的變化。4性能
如果一位WebApp用戶必須等待很長時間(訪問、服務(wù)器端處理、客戶端格式化及顯示),用戶就會轉(zhuǎn)向其他地方。5可得性
大多數(shù)的WebApp用戶要求全天候的可訪問性。6數(shù)據(jù)驅(qū)動
許多WebApp的主要功能是使用超媒體向最終用戶提供文本、圖片、音頻及視頻內(nèi)容。
WebApp一般用來訪問存儲在數(shù)據(jù)庫中的信息,這些數(shù)據(jù)庫最初并不是基于Web環(huán)境的整體組成部分(例如電子商務(wù)或金融應(yīng)用)。WebApp一般具有如下特點:8.6WebApp設(shè)計8.6.1WebApp的特點及應(yīng)用類型7內(nèi)容敏感性
內(nèi)容的質(zhì)量和藝術(shù)性在很大程度上影響WebApp的質(zhì)量。8持續(xù)演化性
傳統(tǒng)的應(yīng)用如軟件是隨一系列規(guī)劃好的時間間隔發(fā)布而演化的,而Web應(yīng)用則持續(xù)地演化。對于某些WebApp,是以分鐘為單位進(jìn)行更新,或者對每個請求進(jìn)行獨立運算。9即時性
將WebApp投入市場可能是幾天或幾周的事情,Web工程師必須經(jīng)過修改計劃、分析、設(shè)計、實現(xiàn)、測試等來滿足WebApp的時間進(jìn)度安排。10保密性
由于WebApp是通過網(wǎng)絡(luò)來訪問的,為了保護(hù)敏感的內(nèi)容、提供保密的數(shù)據(jù)傳輸模式,在支持WebApp的整個基礎(chǔ)設(shè)施上必須有較強(qiáng)的保密措施。11美學(xué)性
WebApp具有很大的吸引力就是它的美觀性。8.6WebApp設(shè)計8.6.1WebApp的特點及應(yīng)用類型信息型使用簡單的導(dǎo)航和鏈接提供只讀內(nèi)容。1下載型用戶從相應(yīng)的服務(wù)器下載信息。2可定制型用戶根據(jù)自己的特殊需要定制內(nèi)容。3交互型在用戶群體中,通過聊天室、公告牌或即時消息傳遞進(jìn)行通信。4用戶輸入型基于表格的輸入是滿足通信要求的主要機(jī)制。5WebApp受到大家的歡迎,下面是Web工程(WebE)的應(yīng)用類型。8.6WebApp設(shè)計8.6.1WebApp的特點及應(yīng)用類型面向事物型用戶提交一份由WebApp完成的請求(例如用戶名注冊)。6面向服務(wù)型應(yīng)用程序向用戶提供服務(wù),例如輔助用戶確定支付。7門戶型應(yīng)用程序?qū)⒂脩粢龑?dǎo)到本門戶應(yīng)用范圍之外的其他Web內(nèi)容或服務(wù)。8數(shù)據(jù)訪問型用戶查詢大型數(shù)據(jù)庫并提取信息。9數(shù)據(jù)倉庫型用戶查詢一組大型數(shù)據(jù)庫并提取信息。108.6WebApp設(shè)計8.6.2WebApp的需求工程在設(shè)計開發(fā)一個WebApp工程時,首先要明確需求目標(biāo),要明白:①WebApp的業(yè)務(wù)需求是什么?②WebApp必須完成的目標(biāo)是什么?③誰將使用WebApp?即WebApp服務(wù)的對象是誰?通過調(diào)查,一定要了解并解決以下3個問題:(1)表達(dá)或處理的信息或內(nèi)容是什么?(2)為用戶提供的功能是什么?(3)對各類用戶定義不同的交互場景,當(dāng)WebApp表達(dá)內(nèi)容和執(zhí)行功能時,它表現(xiàn)出來的行為是什么?8.6WebApp設(shè)計
8.6.2WebApp的需求工程
由于WebApp需求工程的諸多特性,導(dǎo)致Web應(yīng)用需求工程中經(jīng)常會出現(xiàn)需求范圍未界定、需求未細(xì)化、需求描述不清楚、需求遺漏和需求互相矛盾等問題。Web應(yīng)用需求階段不但要分析Web應(yīng)用本身的功能和性能,還要對可能的用戶群體進(jìn)行分析和調(diào)查,并根據(jù)分析結(jié)果制定生成模型。Web應(yīng)用規(guī)模的大型化、功能復(fù)雜化,使得Web應(yīng)用需求的開發(fā)和管理也日益復(fù)雜,需求工程自身也面臨著需求獲取與需求分析、需求表示、需求確認(rèn)和驗證等問題。與傳統(tǒng)軟件工程一樣,Web應(yīng)用需求工程的活動一般也可以分為需求獲取、需求分析、需求文檔編寫、需求確認(rèn)與驗證、需求跟蹤與需求復(fù)用5個階段。8.6WebApp設(shè)計
8.6.2WebApp的需求工程需求獲取首先需要的是技術(shù)的支持。其次,在需求獲取工作中主要涉及了3個至關(guān)重要的因素:應(yīng)搜集什么信息;從什么來源中搜集信息;用什么機(jī)制或技術(shù)搜集信息。再次,需求獲取的開始,代表著軟件項目正式開始實施。綜合上述三點,使得需求獲取成為軟件開發(fā)中最困難、最關(guān)鍵、最易出錯,也是最需要交流的階段。這種交流包括系統(tǒng)開發(fā)方與用戶方領(lǐng)導(dǎo)之間的交流,也包括具體開發(fā)者與領(lǐng)導(dǎo)及用戶之間的交流。在工作開展中,主要是就業(yè)務(wù)流程、組織架構(gòu)、軟硬件環(huán)境和現(xiàn)有系統(tǒng)等相關(guān)內(nèi)容進(jìn)行溝通,挖掘系統(tǒng)最終用戶的真正需求,把握需求的方向。在需求獲取調(diào)研會中必須對需求獲取方法做驗證?,F(xiàn)行的需求獲取方法一般有基于調(diào)查的需求獲取方法、基于用例的需求獲取方法、原型法等幾種方法。各種需求獲取方法各有利弊。需求獲取階段018.6WebApp設(shè)計
8.6.2WebApp的需求工程需求分析與需求獲取是密切相關(guān)的,需求獲取是需求分析的基礎(chǔ),需求分析是需求獲取的直接表現(xiàn),兩者相互促進(jìn),相互制約。需求分析與需求獲取的不同,主要在于需求分析是在已經(jīng)了解用戶方的實際的、較全面客觀的業(yè)務(wù)需求以及相關(guān)信息的基礎(chǔ)上,結(jié)合軟、硬件實現(xiàn)方案,并做出初步的系統(tǒng)原型給用戶方做演示。用戶方通過原型演示來體驗業(yè)務(wù)流程的合理化、準(zhǔn)確性和易用性。同時,用戶還要通過原型演示及時地發(fā)現(xiàn)并提出其中存在的問題和改進(jìn)意見和方法。需求分析階段028.6WebApp設(shè)計
8.6.2WebApp的需求工程需求開發(fā)的最終成果是,在對所要開發(fā)的產(chǎn)品達(dá)成共識后編寫具體的文檔。需求文檔是在需求獲取和需求分析兩個階段任務(wù)結(jié)束時生成的,所以文檔要包含所有需求。在此階段先要從軟件工程和文檔管理的角度出發(fā),依據(jù)相關(guān)的標(biāo)準(zhǔn)審核需求文檔內(nèi)容,確定需求文檔內(nèi)容是否完整,并對需求文檔中存在的問題進(jìn)行修改。需求文檔編寫階段038.6WebApp設(shè)計
8.6.2WebApp的需求工程需求確認(rèn)主要是針對《軟件需求規(guī)格說明書》的評審,保證需求符合要求,具有優(yōu)秀需求的特征,并且符合好的需求規(guī)格說明的特征?!盾浖枨笠?guī)格說明書》用于與其他軟件開發(fā)人員(設(shè)計人員、測試人員、維護(hù)人員)交流,探討最終產(chǎn)品的功能。需求確認(rèn)階段048.6WebApp設(shè)計
8.6.2WebApp的需求工程需求跟蹤是指通過比較需求文檔與后續(xù)工作成果之間的對應(yīng)關(guān)系,確保產(chǎn)品依據(jù)需求文檔進(jìn)行開發(fā),建立與維護(hù)“需求-設(shè)計-編程-測試”之間的一致性,確保所有工作成果符合用戶需求。需求跟蹤是一項需要進(jìn)行大量手工勞動的任務(wù),在系統(tǒng)開發(fā)和維護(hù)的過程中,一定要隨時對跟蹤聯(lián)系鏈信息進(jìn)行更新。需求跟蹤能力的好壞會直接影響產(chǎn)品質(zhì)量,降低維護(hù)成本,容易實現(xiàn)復(fù)用,同時,需求跟蹤還需要用戶方的大力支持。需求跟蹤階段058.6WebApp設(shè)計
8.6.2WebApp的需求工程在上圖中描述了Web需求工程的5個階段,需求分析員收集用戶的需求,接著用模型或原型來獲取需求,進(jìn)行需求分析。當(dāng)需求被理解后,進(jìn)入到軟件需求文檔規(guī)格說明編寫階段,在該階段中,決定哪些必須的行為要在軟件中實現(xiàn)。在確認(rèn)階段,檢查規(guī)格說明是否與客戶在最終產(chǎn)品中看到的功能相匹配,檢查或修改規(guī)格說明書中的問題。通過修改、跟蹤與復(fù)用來完善需求,確保設(shè)計順利完成。8.6WebApp設(shè)計
8.6.2WebApp的需求工程(1)功能需求就是Web應(yīng)用有什么用,需要做什么,能夠為用戶提供什么功能,能解決哪些問題。Web應(yīng)用的功能需求是有層次性的,有核心功能要求和輔助功能要求。在開發(fā)過程中應(yīng)該優(yōu)先實現(xiàn)核心功能。功能需求常用UML中的用例圖進(jìn)行描述。8.6WebApp設(shè)計
8.6.2WebApp的需求工程數(shù)據(jù)需求也稱為概念需求、內(nèi)容需求或存儲需求。數(shù)據(jù)需求確定Web應(yīng)用的信息存儲和管理方法。具體包括:①確定WebApp所提供的內(nèi)容,包括文本、視頻、圖像、音頻、表格、壓縮包等采用何種表現(xiàn)方式;②內(nèi)容是由網(wǎng)站還是用戶進(jìn)行添加和維護(hù)。
也稱交互需求,它定義一個Web應(yīng)用如何與各種不同類型的用戶交互。由于Web應(yīng)用的用戶群的知識結(jié)構(gòu)、習(xí)慣、興趣愛好等方面均有很大不同,因此Web應(yīng)用應(yīng)該讓未經(jīng)過正式培訓(xùn)的用戶能夠輕松地使用。在需求獲取過程中,開發(fā)原型系統(tǒng)是一種較好的用來獲取用戶的界面需求的方式。通過原型系統(tǒng)將用戶對Web應(yīng)用界面的期望反映出來并反復(fù)與用戶交互,可以幫助開發(fā)人員設(shè)計出用戶滿意的Web應(yīng)用。界面需求功能需求可被細(xì)化為以下幾個方面的內(nèi)容。8.6WebApp設(shè)計
8.6.2WebApp的需求工程數(shù)據(jù)需求也稱為概念需求、內(nèi)容需求或存儲需求。數(shù)據(jù)需求確定Web應(yīng)用的信息存儲和管理方法。具體包括:①確定WebApp所提供的內(nèi)容,包括文本、視頻、圖像、音頻、表格、壓縮包等采用何種表現(xiàn)方式;②內(nèi)容是由網(wǎng)站還是用戶進(jìn)行添加和維護(hù)。事務(wù)性需求也稱內(nèi)部功能性需求或服務(wù)需求,它表明一個Web應(yīng)用必須進(jìn)行的內(nèi)部處理(后臺處理)。事務(wù)性需求不需要考慮界面和交互方面的內(nèi)容。8.6WebApp設(shè)計
8.6.2WebApp的需求工程由于Web軟件大多采用基于瀏覽器的交互界面,網(wǎng)頁之間的跳轉(zhuǎn)成為“導(dǎo)航”。良好的Web應(yīng)用應(yīng)該讓用戶方便地在網(wǎng)站的不同頻道與頁面之間跳轉(zhuǎn),而不需要經(jīng)常使用瀏覽器的前進(jìn)/后退功能。在整理導(dǎo)航關(guān)系時,必須避免用戶在導(dǎo)航中迷失。設(shè)計時,應(yīng)從基網(wǎng)頁出發(fā)經(jīng)過簡單且盡可能短的導(dǎo)航鏈返回到基網(wǎng)頁。導(dǎo)航需求8.6WebApp設(shè)計
8.6.2WebApp的需求工程(2)質(zhì)量需求描述了服務(wù)的質(zhì)量以及Web應(yīng)用的安全性、性能及可用性方面的內(nèi)容。主要的質(zhì)量屬性包括系統(tǒng)性能、可靠性、可用性、效率、可維護(hù)性和可移植性等。由于Web應(yīng)用的性能嚴(yán)重依賴于網(wǎng)絡(luò)情況,因此在分析質(zhì)量需求時需要考慮網(wǎng)絡(luò)帶寬及網(wǎng)絡(luò)延時等的影響。Web軟件在上線后無時無刻都面臨來自全球各地的安全威脅,需求工程師必須關(guān)注用戶的安全需求,設(shè)計時應(yīng)注意標(biāo)識需要保護(hù)的敏感數(shù)據(jù)和功能,明確其訪問權(quán)限以及用戶在權(quán)限驗證方面的需求。8.6WebApp設(shè)計
8.6.2WebApp的需求工程1性能
包括Web應(yīng)用支持的最大并發(fā)訪問數(shù)、響應(yīng)時間、吞吐量、吞吐率等性能指標(biāo)。不同類型的Web應(yīng)用所關(guān)注的性能指標(biāo)也有不同的側(cè)重點。2可靠性
描述Web應(yīng)用能在多長時間內(nèi)保持正常工作狀態(tài)。例如,對于一臺關(guān)鍵的Web服務(wù)器,往往需要它一周7天、每天24小時不間斷地工作。通過備份、故障恢復(fù)等措施,可以提高Web應(yīng)用的可靠性。3可用性
描述在要求的外部資源得到保證的前提下,Web應(yīng)用在規(guī)定的條件、規(guī)定的時刻或時間段內(nèi)處于可執(zhí)行狀態(tài)的能力。可用性是可靠性、可維護(hù)性的綜合反映。8.6WebApp設(shè)計
8.6.2WebApp的需求工程4效率
描述Web應(yīng)用利用計算資源的能力,在完成相同的計算任務(wù)時,Web應(yīng)用占用CPU時間和內(nèi)存空間等計算資源越少,說明應(yīng)用的效率越高。即在相同的計算資源的條件下,完成的計算任務(wù)越多,效率越高。5可維護(hù)性
描述Web應(yīng)用投入運行后對其進(jìn)行維護(hù)的難易程度。理想狀態(tài)下,Web應(yīng)用在投入運行后可以在不停止服務(wù)的前提下,只需修改少量代碼就可以實現(xiàn)新的功能需求或錯誤修正。影響可維護(hù)性的因素包括代碼的可讀性、可擴(kuò)展性和可測試性等。需要注意的是,編寫可維護(hù)性好的代碼必然會加大開發(fā)者的工作量且降低開發(fā)速度。因此在可維護(hù)性和開發(fā)速度之間需要做出權(quán)衡。8.6WebApp設(shè)計
8.6.2WebApp的需求工程
(3)系統(tǒng)環(huán)境需求描述一個Web應(yīng)用如何嵌入到一個已有的環(huán)境中,以及它如何與遺留系統(tǒng)、中間件等外部組件交互。
(4)對于項目的利益相關(guān)者來說,項目約束是需要多方協(xié)商解決的。典型項目約束包括項目預(yù)算、進(jìn)度、技術(shù)限制、所采用的標(biāo)準(zhǔn)和開發(fā)技術(shù)等。
(5)Web應(yīng)用需求經(jīng)常會發(fā)生變更。因此,Web應(yīng)用開發(fā)人員需要著眼于Web應(yīng)用未來的發(fā)展來制定方案。8.6WebApp設(shè)計8.6.3WebApp需求分析需求分析包括提取、分析和審查獲取到的需求,以確保所有的利益相關(guān)者都明確其含義并找出其中的錯誤、遺漏或不足。需求分析的目的在于得到高質(zhì)量和具體的需求。下面將介紹需求分析經(jīng)歷的活動、需要遵循的原則以及需求規(guī)格說明書的設(shè)計。8.6WebApp設(shè)計
8.6.3WebApp需求分析
1.需求分析活動
由于Web應(yīng)用的特殊性和行業(yè)覆蓋的廣闊性,以及需求分析的高風(fēng)險性,高質(zhì)量的需求分析是Web應(yīng)用成功的關(guān)鍵因素。現(xiàn)有的需求分析方法主要包括以下活動。1
關(guān)聯(lián)圖用于定義Web應(yīng)用與其外部實體間的邊界和接口的簡單模型。繪制系統(tǒng)關(guān)聯(lián)圖2
當(dāng)開發(fā)人員或用戶無法確定需求時,開發(fā)一個用戶界面原型可以使Web應(yīng)用具體化。用戶可以對原型進(jìn)行評估,使Web應(yīng)用的參與者能更好地理解所要解決的問題,同時找出需求文檔與原型之間的沖突之處。創(chuàng)建用戶界面原型8.6WebApp設(shè)計
8.6.3WebApp需求分析4
應(yīng)用分析方法來確定用例、特性或單項需求實現(xiàn)的優(yōu)先級,以優(yōu)先級為基礎(chǔ)確定Web應(yīng)用將包括哪些特性或哪類需求。優(yōu)先級很高的需求應(yīng)在Web應(yīng)用的第一個版本中實現(xiàn),而優(yōu)先級較低
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 氣候變化下農(nóng)業(yè)生態(tài)系統(tǒng)的適應(yīng)性調(diào)整研究進(jìn)展
- 物聯(lián)網(wǎng)技術(shù)在智能家居生態(tài)圈的應(yīng)用前景
- 國慶節(jié)秋天主題活動方案
- 現(xiàn)代辦公樓電力維護(hù)成本深度剖析
- 現(xiàn)代物流技術(shù)與醫(yī)療行業(yè)互補(bǔ)與共進(jìn)
- Unit 4 Friends Forever Understanding ideas 說課稿-2024-2025學(xué)年高中英語外研版(2019)必修第一冊001
- 2023八年級物理上冊 第四章 在光的世界里第6節(jié) 神奇的眼睛說課稿(新版)教科版
- 6《觀察土壤》說課稿-2023-2024學(xué)年科學(xué)四年級下冊教科版
- 2023二年級語文上冊 第八單元 24 風(fēng)娃娃說課稿 新人教版
- 18《文言文二則 鐵杵成針》(說課稿)2023-2024學(xué)年-統(tǒng)編版四年級語文下冊
- 2025年度院感管理工作計劃(后附表格版)
- 勵志課件-如何做好本職工作
- 2024年山東省濟(jì)南市中考英語試題卷(含答案解析)
- 暑假作業(yè) 10 高二英語完形填空20篇(原卷版)-【暑假分層作業(yè)】2024年高二英語暑假培優(yōu)練(人教版2019)
- 2024年建筑業(yè)10項新技術(shù)
- 語文七年級下字帖打印版
- 兒科重癥監(jiān)護(hù)病房管理演示文稿
- 甲基異丁基甲酮化學(xué)品安全技術(shù)說明書
- 條形基礎(chǔ)的平法識圖課件
- 秘書實務(wù)完整版課件全套ppt教程
- 義務(wù)教育《歷史》課程標(biāo)準(zhǔn)(2022年版)
評論
0/150
提交評論