隨筆-128  評論-55  文章-5  trackbacks-0
           

          Web工程過程及其中MVC模式的應(yīng)用

               作者:orangelizq      2007-05

             

          近年來,基于Web的應(yīng)用系統(tǒng)的開發(fā)備受關(guān)注。Web應(yīng)用系統(tǒng)有著自己獨特的屬性,Web系統(tǒng)的開發(fā)也不同于傳統(tǒng)的軟件開發(fā)。根據(jù)這些屬性和特征討論了結(jié)構(gòu)化的分析和設(shè)計方法以及螺旋模型在Web開發(fā)過程中的應(yīng)用,并且具體分析了目前廣泛流行的MVC設(shè)計模式在Web工程中應(yīng)用的優(yōu)點。

           

          關(guān)鍵詞:Web工程;軟件工程;MVC模式;結(jié)構(gòu)化方法;螺旋模型

           

          Web Engineering Process And The Application of MVC Model

           

          Abstract

          In recent years, the development of Web-based application system has attracted much attention. Web application system has its own unique attributes and it is different from the traditional software system. Based on these attributes and characteristics, this paper discussed the application of structural analysis and design methods and spiral model in WebApp, then specific analysis the advantages of MVC model in WebApp.

           

          Keywordsweb Engineeringsoftware EngineeringMVC modelstructured methods

          spiral model

          一、引言

          隨著InternetIntranetExtranet的快速增長,web已經(jīng)對商業(yè)、工業(yè)、銀行、財政、教育、政府和娛樂及我們的工作和生活產(chǎn)生了深遠的影響。許多傳統(tǒng)的信息和數(shù)據(jù)庫系統(tǒng)正在被移植到互聯(lián)網(wǎng)上,以電子商務(wù)為典型代表的應(yīng)用系統(tǒng)越來越普及。尤其在現(xiàn)代企業(yè)應(yīng)用中,各種信息系統(tǒng)在原來的基礎(chǔ)上,由基于CS方式向基于BS方式轉(zhuǎn)換,逐漸過渡為基于WebMISERPEIP乃至CIM 的企業(yè)業(yè)務(wù)IT系統(tǒng),從而使企業(yè)管理不再局限于企業(yè)內(nèi)部,而是通過Internet擴展到遍布全球的客戶、供應(yīng)商、合作伙伴等各個環(huán)節(jié)[1]

          澳大利亞的Yogesh DeshpandeSteve Hansen1998年就提出了Web工程的概念,他們認為Web工程是用系統(tǒng)的、嚴(yán)密的、可以測量的方法來開發(fā)、實施和維護基于Web的應(yīng)用或基于Web的軟件的工程應(yīng)用[2]

          然而傳統(tǒng)軟件工程方法和技術(shù)應(yīng)用到基于Web的系統(tǒng)開發(fā)中,顯得力不從心。目前,Web系統(tǒng)開發(fā)缺乏嚴(yán)格和系統(tǒng)的方法,很少有人注意開發(fā)方法、度量和評估技術(shù)、系統(tǒng)質(zhì)量和項目管理。隨著Web應(yīng)用系統(tǒng)的規(guī)模和復(fù)雜程度的不斷提高,使得基于Web的應(yīng)用越來越顯得以開發(fā)、管理和維護。一個Web項目的失敗將可能導(dǎo)致很多問題。當(dāng)這種情況發(fā)生時,人們對WebInternet的信心可能會無法挽救地動搖,從而引起Web危機[3]。并且,Web危機可能會比軟件開發(fā)人員所面對的軟件危機更加嚴(yán)重、更加廣泛。因此軟件開發(fā)人員迫切需要工程化的Web工程方法和新的對基于Web的系統(tǒng)和應(yīng)用的開發(fā)、部署及評估的方法和工具。

          二、Web工程的特征

          基于Web的系統(tǒng)和應(yīng)用(簡稱為WebApp)不同于其他的軟件類別,它們具有自身獨特的一些屬性,因此基于WebApp的開發(fā)過程和方法也必將不同于傳統(tǒng)軟件工程的過程和方法。一個典型的WebApp應(yīng)該具有以下屬性[4]

          l        網(wǎng)絡(luò)集約性:一個典型的WebApp是網(wǎng)絡(luò)集約的。它駐留于網(wǎng)絡(luò)上,并且必須服務(wù)于變化多樣的客戶群落的需要。

          l        內(nèi)容驅(qū)動性:在多數(shù)情況下,一個WebApp的主要功能是使用超媒體來表示文本、圖形、音頻和視頻內(nèi)容給終端用戶。

          l        持續(xù)演化性:不同于傳統(tǒng)的按一系列規(guī)劃的時間間隔的發(fā)布進行演化的應(yīng)用軟件,Web應(yīng)用持續(xù)地演化。對于某些WebApp而言,甚至是以小時為單位進行更新。

           

          而基于WebApp的開發(fā)又應(yīng)該具有以下特性[4]

          l        即時性:基于Web的應(yīng)用具有其他任何軟件類型中都沒有的即時性。一個完整的Web站點的應(yīng)市時間可能是幾天或幾周。

          l        安全性:由于WebApp是通過網(wǎng)絡(luò)訪問可達的,為了保護敏感的內(nèi)容和提供安全的數(shù)據(jù)傳輸模式,在整個支持WebApp的基礎(chǔ)設(shè)施和應(yīng)用本身內(nèi)部必須實現(xiàn)強的安全措施。

          l        美學(xué)Web比通常意義上的軟件開發(fā)使藝術(shù)和技術(shù)在更大范圍內(nèi)得到結(jié)合。美學(xué)可能和技術(shù)設(shè)計在同樣的程度上決定應(yīng)用的成功。

          三、Web工程的實施方法

          在了解了Web工程特有的屬性和特征后,便需要一個能夠滿足這些的特征的工程化的Web工程方法和新的對基于Web的系統(tǒng)和應(yīng)用的開發(fā)、部署及評估的方法和工具。

          3.1 Web開發(fā)團隊

          開發(fā)大型的基于Web的系統(tǒng)需要有一個具有不同技能、知識和能力的人組成的團隊,這些開發(fā)人員所具有的技能和知識層次結(jié)構(gòu)可組成一個三維技能空間,這三維分別是管理、技術(shù)和人員交流[5]。管理技能包括調(diào)整、規(guī)劃和把Web系統(tǒng)與已經(jīng)存在的信息系統(tǒng)集成;技術(shù)技能包括計算、網(wǎng)絡(luò)和Internet通訊;人員交流技能包括圖形設(shè)計、布局、人員通訊、表達技能等。

          根據(jù)實踐,可以把參加開發(fā)Web項目的人員分為七類,分別是:Web決策人員、內(nèi)容提供人員、Web開發(fā)人員、Web發(fā)布人員、Web支持人員、Web管理人員、最終用戶。其結(jié)構(gòu)如圖3.1所示[2]

          3.1  Web開發(fā)團隊結(jié)構(gòu)示意圖[2]

          這種分類是分等級的但又有重疊的地方。在每一個類別中根據(jù)技能或行為標(biāo)準(zhǔn)不同,又定義了不同的級別。一個人可以屬于不止一個類別,起不同的作用。

          3.2 Web開發(fā)過程

          Web系統(tǒng)的即時性和持續(xù)演化性要求一個迭代的、增量的過程模型,以速射的序列生產(chǎn)WebApp發(fā)布。

          3.2.1 使用結(jié)構(gòu)化的分析和設(shè)計方法[6]

          Web工程的實施不適合使用面向?qū)ο蟮能浖_發(fā)方法進行系統(tǒng)分析和設(shè)計。因為一個Web應(yīng)用系統(tǒng)的開發(fā)會遇到許多不可避免的不確定因素,這就很難從客戶真實系統(tǒng)中導(dǎo)出對象體系。如果強行按照面向?qū)ο蟮姆椒▽ο到y(tǒng)進行分析設(shè)計,勢必要考慮更多內(nèi)容,而與實際需求不一致時便會導(dǎo)致過度設(shè)計甚至重新設(shè)計[9],并且,一旦在實施中發(fā)現(xiàn)不合理設(shè)計,修正的代價就可能極大。同時,由于占有相當(dāng)比重Web頁面開發(fā)的Web應(yīng)用包含大量基于文件的Web資源,缺乏抽象概念,缺乏繼承和組裝這樣的重用機制,這使得面向?qū)ο蟮拈_發(fā)方法顯得力不從心。

          另一方面,Web應(yīng)用強調(diào)結(jié)構(gòu)清晰簡潔、符合用戶思維的功能導(dǎo)航,這與具有自頂向下、逐步求精分解方法的結(jié)構(gòu)化分析設(shè)計思想相吻合。作為軟件工程中技術(shù)最為成熟、應(yīng)用最廣且非常有效的一種軟件開發(fā)方法,結(jié)構(gòu)化方法的理論概念和實踐方法已廣為人知,并取得廣泛的成功。因而使用結(jié)構(gòu)化的方法分析和設(shè)計Web應(yīng)用系統(tǒng),可以更多地借鑒傳統(tǒng)軟件系統(tǒng)的成功開發(fā)經(jīng)驗,這更利于構(gòu)成復(fù)雜的開發(fā)團隊中成員之間的溝通,可以更方便地實現(xiàn)下文中將要提到的螺旋模型,從而成功實施Web工程。

          結(jié)構(gòu)化方法是將一個復(fù)雜的大型系統(tǒng)自頂向下地分解成一個個簡單的系統(tǒng),用系統(tǒng)工程的思想和工程化的模式對系統(tǒng)進行功能分解和結(jié)構(gòu)設(shè)計,從內(nèi)部功能上模擬客觀世界。結(jié)構(gòu)化方法包括結(jié)構(gòu)化分析(SA)方法、結(jié)構(gòu)化設(shè)計(SD)方法、結(jié)構(gòu)化編程(SP)方法。根據(jù)分析方法的不同,又可分為面向數(shù)據(jù)流的和面向數(shù)據(jù)結(jié)構(gòu)的兩大類。本文所討論的是開發(fā)步驟明確、適用范圍更廣的面向數(shù)據(jù)流的結(jié)構(gòu)化軟件開發(fā)方法。

          面向數(shù)據(jù)流的結(jié)構(gòu)化軟件開發(fā)方法使用由簡單易讀的圖形符號構(gòu)成的數(shù)據(jù)流圖表達,根據(jù)系統(tǒng)內(nèi)部的數(shù)據(jù)傳遞和變換關(guān)系,自頂向下逐層分解,描繪出滿足功能要求的系統(tǒng)邏輯模型。設(shè)計階段依據(jù)模塊獨立性準(zhǔn)則、軟件結(jié)構(gòu)準(zhǔn)則(軟件結(jié)構(gòu)包括變換型和事務(wù)型兩種典型類型),將數(shù)據(jù)流圖轉(zhuǎn)換為應(yīng)用系統(tǒng)的體系結(jié)構(gòu),進而建立系統(tǒng)的物理模型,實現(xiàn)系統(tǒng)的概要設(shè)計[4]

          當(dāng)然,這里所強調(diào)的結(jié)構(gòu)化方法是指使用結(jié)構(gòu)化方法中的結(jié)構(gòu)化分析和結(jié)構(gòu)化設(shè)計,而在編碼實現(xiàn)階段,完全可以借助面向?qū)ο蟮目梢暬幊坦ぞ撸鶕?jù)實際需要準(zhǔn)確地抽取底層級別的對象并設(shè)計基類,從而利用繼承、重載等機制高質(zhì)量地重用代碼,簡化結(jié)構(gòu),降低維護難度。這一點在應(yīng)用螺旋模型的系統(tǒng)開發(fā)過程中,不斷循環(huán)調(diào)整結(jié)構(gòu)、優(yōu)化代碼以實現(xiàn)收斂逼近最優(yōu)結(jié)果時顯得尤為重要。

          3.2.2 應(yīng)用螺旋模型

          隨著大量傳統(tǒng)軟件系統(tǒng)的開發(fā)實踐和經(jīng)驗積累,多種軟件工程方法被總結(jié)出來,而且對它們進行了模型化,從而將相關(guān)方法從實踐上升到理論。而基于Web的應(yīng)用系統(tǒng),同樣作為一種軟件系統(tǒng),也可以借鑒應(yīng)用這些模型,從中吸取有益的經(jīng)驗,以便更有效、更便捷地實施Web工程。螺旋模型正是這樣一種同時適用于Web工程的軟件開發(fā)模式[6]

          由于Web系統(tǒng)的即時性和持續(xù)演化性,使得需要一個迭代的、增量的過程模型。因為Web系統(tǒng)作為一個開放的系統(tǒng),其用戶的形式具有多樣性,需要迎合具有不同技術(shù)和能力的用戶,復(fù)雜化人機接口,用戶界面和信息提交。而且基于Web的系統(tǒng)將連續(xù)關(guān)注視覺和感覺,強調(diào)感官舒服,在多種程度上與多媒體結(jié)合。因此用戶在開發(fā)早期很難清楚地提供系統(tǒng)的完整需求,開發(fā)人員也很難在系統(tǒng)開發(fā)的需求分析階段完全正確地領(lǐng)會和定義用戶所提出的各項需求。而只有當(dāng)軟件成品擺放在用戶面前時,用戶才能更加確認需求,進而激發(fā)新的需求甚至更改需求。這就很容易造成開發(fā)出Web系統(tǒng)需要付出高昂代價的后期需求變動,甚至導(dǎo)致項目失敗。

          應(yīng)用螺旋模型[4]這一基于原型化開發(fā)的進化模型則可以很有效地解決這種問題。這種開發(fā)模型是自內(nèi)向外以螺旋狀的形式進化發(fā)展,每一個周期都要經(jīng)過計劃、分析、設(shè)計實現(xiàn)、用戶反饋等環(huán)節(jié),每一次循環(huán)的結(jié)果都生成一個增強的軟件版本,如圖3.2所示。

          3.2  螺旋模型示意圖[6]

          由圖中看出螺旋模型不是等一個開發(fā)階段的工作完成以后才開始下一個階段的工作,而是把傳統(tǒng)的分階段的軟件開發(fā)方法融入到每一次螺旋循環(huán)當(dāng)中,生成用于驗證預(yù)定用戶需求和可能的設(shè)計方案的中間系統(tǒng)原型,并通過用戶對原型的意見反饋探索和揭示新的需求。一旦獲得新的信息,就對原型進行調(diào)整,除了進一步求精外,還追加實現(xiàn)某些新的、已明確的用戶需求,從而進入新一輪的螺旋循環(huán),逐步逼近最優(yōu)結(jié)果。需要注意的是,這種循環(huán)分析設(shè)計活動不僅針對整個應(yīng)用系統(tǒng)的開發(fā),而且可以同時在不同的模塊開發(fā)中并行進行。

          應(yīng)用螺旋模型這種用戶驅(qū)動的開發(fā)模式,滿足了Web工程以用戶為中心的開發(fā)要求,使用戶最大程度地參與到軟件的開發(fā)過程中并起主導(dǎo)作用,可以在中間系統(tǒng)原形的基礎(chǔ)上進一步清楚的闡述自己的微觀需求,這樣也使開發(fā)者可以真正了解用戶的需求,并能對用戶的動態(tài)需求作出及時的有效的處理,使開發(fā)出來的系統(tǒng)更易于被用戶接受,有利于縮短開發(fā)周期,降低開發(fā)風(fēng)險。

          四、MVC模式在Web開發(fā)過程中的應(yīng)用

          4.1 MVC設(shè)計模式簡介

          MVC模式就是一種目前廣泛流行的設(shè)計模式.它是Xerox PARC20世紀(jì)80年代為編程語言Smalltalk-80發(fā)明的一種軟件設(shè)計模式舊。MVCModel-View-Controller的簡稱。即模型-視圖-控制器[8]MVC包括三類對象.模型Model是應(yīng)用對象.視圖View是它在屏幕上的表示,控制器Controller定義用戶界面對用戶輸入的響應(yīng)方式。如圖4.1所示.

          視圖(View)代表用戶交互界面,對于Web層來說,可以概括為HTML界面,也有可能為XHTMLXMLApplet。模型(Mode1)是業(yè)務(wù)流程,狀態(tài)的處理以及業(yè)務(wù)規(guī)則的制定。業(yè)務(wù)流程的處理過程對其它層來說是黑箱操作,模型接受視圖請求的數(shù)據(jù).并返回最終的處理結(jié)果。業(yè)務(wù)模型的設(shè)計是MVC最主要的核心。業(yè)務(wù)模型還有一個很重要的模型就是數(shù)據(jù)模型。數(shù)據(jù)模型主要指實體對象的數(shù)據(jù)保存(持久化)。控制器(Controller)可以理解為從用戶接收請求.將模型與視圖匹配在一起。共同完成用戶的請求。

          4.1  MVC模式示意圖

          4.2 MVC設(shè)計模式在J2EE中的實現(xiàn)

          為了更清楚地說明問題,下面介紹MVC設(shè)計模式在J2EE架構(gòu)中的實現(xiàn)。盡管MVC設(shè)計模式很早就出現(xiàn)了,但在WebApp中引入MVC確實非常困難的。主要原因是在早期的Web應(yīng)用的開發(fā)中,程序設(shè)計語言和HTML的分離一直難以實現(xiàn),從而執(zhí)行業(yè)務(wù)邏輯的程序代碼和執(zhí)行表示的程序代碼混雜在一起,因而很難分離出單獨的業(yè)務(wù)模型。

          為了解決以上問題,Sun公司先后制定了兩種規(guī)范,稱為JSP Model1JSP Model2。雖然Model1在一定程度上實現(xiàn)了MVC,但是它的運用并不理想,直到基于J2EEJSP Model2出現(xiàn)才得以改觀。JSP Model2技術(shù)用JSP技術(shù)實現(xiàn)視圖的功能,用Servlet技術(shù)實現(xiàn)控制器的功能,用JavaBean技術(shù)實現(xiàn)模型的功能[8]

          4.2  JSP Model2示意圖

           

          如圖4.2所示,JSP Model2體系結(jié)構(gòu)是一種聯(lián)合使用JSPServlet來提供動態(tài)內(nèi)容服務(wù)的方法。它吸取了JSPServlet兩種技術(shù)各自的突出優(yōu)點,用JSP生成表示層的內(nèi)容,讓Servlet來完成深層次的處理任務(wù)。它清晰地分離表達和內(nèi)容,明確了角色定義以及開發(fā)者與網(wǎng)頁設(shè)計者的分工。

           

          4.1 MVC模式應(yīng)用于Web工程過程中的優(yōu)勢

          在詳細的MVC設(shè)計模式后,可以看出MVC模式可以滿足Web工程的網(wǎng)絡(luò)集約性,內(nèi)容驅(qū)動性和持續(xù)演化性的要求。首先,多個視圖共享一個模型,從而使得同一個Web應(yīng)用程序可以提供多種用戶界面。例如用戶希望既能通過瀏覽器來收發(fā)電子郵件,又能通過手機來訪問電子郵箱,這就要求Web網(wǎng)站同時提供Internet界面和WAP界面[8]。在MVC設(shè)計模式中,模型返回用戶請求并返回響應(yīng)數(shù)據(jù),視圖負責(zé)格式化數(shù)據(jù)并把它們呈現(xiàn)給用戶,業(yè)務(wù)邏輯和表示層分離,同一個模型可以被不同的視圖重用,這樣就能夠滿足Web工程的網(wǎng)絡(luò)集約性要求,即同時服務(wù)于變化多樣的客戶群落。

          其次,模型是自包含的,與控制器和視圖保持相對獨立,所以可以方便的改變應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)規(guī)則。如將數(shù)據(jù)庫從MySQL移植到Oracle,或者把RDBMS數(shù)據(jù)源改變成LDAP數(shù)據(jù)源,只需要改變模型即可,一旦正確的實現(xiàn)了模型,視圖都會正確的顯示它們。由于MVC的三個模塊相互獨立,所以能夠構(gòu)造良好的松耦合的構(gòu)件。從而滿足Web工程的內(nèi)容驅(qū)動性要求,可以方便的對數(shù)據(jù)進行管理。

          此外,控制器提高了應(yīng)用程序的靈活性和可配置性。控制器可以用來連接不同的模型和視圖去完成用戶的需求,也可以為構(gòu)造應(yīng)用程序提供強有力的手段。給定一些可重用的模型和視圖,控制器可以根據(jù)用戶的需求去選擇適當(dāng)?shù)哪P瓦M行處理,然后選擇適當(dāng)?shù)囊晥D將結(jié)果顯示給用戶。因而滿足Web工程的持續(xù)演化性需求,當(dāng)用戶的需求發(fā)生改變時,只需要對其中的具體模型或視圖進行修改即可,而整個系統(tǒng)的結(jié)構(gòu)不需要變化。

          五、總結(jié)

          文章首先討論了Web工程的各種屬性以及開發(fā)Web工程的各種特性,然后討論了運用結(jié)構(gòu)化的分析和設(shè)計方法來開發(fā)Web工程,并將螺旋模型,這一迭代的、增量的過程模型應(yīng)用到Web工程開發(fā)中,從而使得開發(fā)者可以真正了解用戶的需求,并能對用戶的動態(tài)需求做出及時的有效的處理,使開發(fā)出來的系統(tǒng)更易于被用戶接受,有利于縮短開發(fā)周期,降低開發(fā)風(fēng)險。最后討論了目前廣泛流行的MVC設(shè)計模式在Web工程中的應(yīng)用,可以看出MVC模式的應(yīng)用使得螺旋模型得到更好的實施,能夠讓軟件在健壯性、代碼重用和結(jié)構(gòu)方面上一個新的臺階,大大提高軟件開發(fā)的效率。

          參考文獻

          [1] 張友生.  Web工程實踐研究[J].  小型微型計算機系統(tǒng),20047

          [2] 張友生.  Web工程過程研究[J].  計算機工程與應(yīng)用,20032

          [3] Zelnick NNifty technology and nonconformanceThe Web in crisis[J] Computer1998(10)115119

          [4] ()Roger S. Pressman 著,梅宏 譯,軟件工程--實踐者的研究方法[M],北京:機械工業(yè)出版社·20029

          [5] Hansen SDeshapande Y and M urugesan S A classification based on skill hierarch for Web information system players  [c]Proc ICSE Workshop on W eb Engineering1999

          [6] 董寒松、李錚、尤楓、趙恒永.  基于結(jié)構(gòu)化方法和螺旋模型實施Web工程的探究[J]. 微型機與應(yīng)用,200511

          [7] 張瓊聲、龐緒峰.  Web工程及其應(yīng)用[J]. 油氣田地面工程,200310

          [8] 孫衛(wèi)琴 著,精通Struts:基于MVCJava Web設(shè)計與開發(fā)[M],北京:電子工業(yè)出版社·20048

          [9] Gamma E著,李英軍,馬曉星,蔡敏等譯.設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ).北京:機械工業(yè)出版社,2000

           



          Author: orangelizq
          email: orangelizq@163.com

          歡迎大家訪問我的個人網(wǎng)站 萌萌的IT人
          posted on 2007-09-30 10:23 桔子汁 閱讀(1840) 評論(0)  編輯  收藏 所屬分類: WebService 技術(shù)

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 寿光市| 布尔津县| 吴堡县| 平舆县| 安西县| 舒城县| 通化县| 鲜城| 滨海县| 黑水县| 宜兴市| 远安县| 巴彦县| 岗巴县| 贞丰县| 涡阳县| 怀远县| 威宁| 庄浪县| 错那县| 仙游县| 拜泉县| 宿州市| 梁平县| 元氏县| 三原县| 黔西县| 灵武市| 锦州市| 广饶县| 封开县| 吴川市| 营口市| 台北市| 双桥区| 泗阳县| 荆州市| 靖安县| 嘉荫县| 灵山县| 双辽市|