Web工程過程及其中MVC模式的應用
作者:orangelizq 2007-05
摘 要
近年來,基于Web的應用系統的開發備受關注。Web應用系統有著自己獨特的屬性,Web系統的開發也不同于傳統的軟件開發。根據這些屬性和特征討論了結構化的分析和設計方法以及螺旋模型在Web開發過程中的應用,并且具體分析了目前廣泛流行的MVC設計模式在Web工程中應用的優點。
關鍵詞:Web工程;軟件工程;MVC模式;結構化方法;螺旋模型
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.
Keywords:web Engineering;software Engineering;MVC model;structured methods;
spiral model
一、引言
隨著Internet和Intranet/Extranet的快速增長,web已經對商業、工業、銀行、財政、教育、政府和娛樂及我們的工作和生活產生了深遠的影響。許多傳統的信息和數據庫系統正在被移植到互聯網上,以電子商務為典型代表的應用系統越來越普及。尤其在現代企業應用中,各種信息系統在原來的基礎上,由基于C/S方式向基于B/S方式轉換,逐漸過渡為基于Web的MIS、ERP、EIP乃至CIM 的企業業務IT系統,從而使企業管理不再局限于企業內部,而是通過Internet擴展到遍布全球的客戶、供應商、合作伙伴等各個環節[1]。
澳大利亞的Yogesh Deshpande和Steve Hansen在1998年就提出了Web工程的概念,他們認為Web工程是用系統的、嚴密的、可以測量的方法來開發、實施和維護基于Web的應用或基于Web的軟件的工程應用[2]。
然而傳統軟件工程方法和技術應用到基于Web的系統開發中,顯得力不從心。目前,Web系統開發缺乏嚴格和系統的方法,很少有人注意開發方法、度量和評估技術、系統質量和項目管理。隨著Web應用系統的規模和復雜程度的不斷提高,使得基于Web的應用越來越顯得以開發、管理和維護。一個Web項目的失敗將可能導致很多問題。當這種情況發生時,人們對Web和Internet的信心可能會無法挽救地動搖,從而引起Web危機[3]。并且,Web危機可能會比軟件開發人員所面對的軟件危機更加嚴重、更加廣泛。因此軟件開發人員迫切需要工程化的Web工程方法和新的對基于Web的系統和應用的開發、部署及評估的方法和工具。
二、Web工程的特征
基于Web的系統和應用(簡稱為WebApp)不同于其他的軟件類別,它們具有自身獨特的一些屬性,因此基于WebApp的開發過程和方法也必將不同于傳統軟件工程的過程和方法。一個典型的WebApp應該具有以下屬性[4]:
l 網絡集約性:一個典型的WebApp是網絡集約的。它駐留于網絡上,并且必須服務于變化多樣的客戶群落的需要。
l 內容驅動性:在多數情況下,一個WebApp的主要功能是使用超媒體來表示文本、圖形、音頻和視頻內容給終端用戶。
l 持續演化性:不同于傳統的按一系列規劃的時間間隔的發布進行演化的應用軟件,Web應用持續地演化。對于某些WebApp而言,甚至是以小時為單位進行更新。
而基于WebApp的開發又應該具有以下特性[4]:
l 即時性:基于Web的應用具有其他任何軟件類型中都沒有的即時性。一個完整的Web站點的應市時間可能是幾天或幾周。
l 安全性:由于WebApp是通過網絡訪問可達的,為了保護敏感的內容和提供安全的數據傳輸模式,在整個支持WebApp的基礎設施和應用本身內部必須實現強的安全措施。
l 美學:Web比通常意義上的軟件開發使藝術和技術在更大范圍內得到結合。美學可能和技術設計在同樣的程度上決定應用的成功。
三、Web工程的實施方法
在了解了Web工程特有的屬性和特征后,便需要一個能夠滿足這些的特征的工程化的Web工程方法和新的對基于Web的系統和應用的開發、部署及評估的方法和工具。
3.1 Web開發團隊
開發大型的基于Web的系統需要有一個具有不同技能、知識和能力的人組成的團隊,這些開發人員所具有的技能和知識層次結構可組成一個三維技能空間,這三維分別是管理、技術和人員交流[5]。管理技能包括調整、規劃和把Web系統與已經存在的信息系統集成;技術技能包括計算、網絡和Internet通訊;人員交流技能包括圖形設計、布局、人員通訊、表達技能等。
根據實踐,可以把參加開發Web項目的人員分為七類,分別是:Web決策人員、內容提供人員、Web開發人員、Web發布人員、Web支持人員、Web管理人員、最終用戶。其結構如圖3.1所示[2]。

圖3.1 Web開發團隊結構示意圖[2]
這種分類是分等級的但又有重疊的地方。在每一個類別中根據技能或行為標準不同,又定義了不同的級別。一個人可以屬于不止一個類別,起不同的作用。
3.2 Web開發過程
Web系統的即時性和持續演化性要求一個迭代的、增量的過程模型,以速射的序列生產WebApp發布。
3.2.1 使用結構化的分析和設計方法[6]
Web工程的實施不適合使用面向對象的軟件開發方法進行系統分析和設計。因為一個Web應用系統的開發會遇到許多不可避免的不確定因素,這就很難從客戶真實系統中導出對象體系。如果強行按照面向對象的方法對系統進行分析設計,勢必要考慮更多內容,而與實際需求不一致時便會導致過度設計甚至重新設計[9],并且,一旦在實施中發現不合理設計,修正的代價就可能極大。同時,由于占有相當比重Web頁面開發的Web應用包含大量基于文件的Web資源,缺乏抽象概念,缺乏繼承和組裝這樣的重用機制,這使得面向對象的開發方法顯得力不從心。
另一方面,Web應用強調結構清晰簡潔、符合用戶思維的功能導航,這與具有“自頂向下、逐步求精”分解方法的結構化分析設計思想相吻合。作為軟件工程中技術最為成熟、應用最廣且非常有效的一種軟件開發方法,結構化方法的理論概念和實踐方法已廣為人知,并取得廣泛的成功。因而使用結構化的方法分析和設計Web應用系統,可以更多地借鑒傳統軟件系統的成功開發經驗,這更利于構成復雜的開發團隊中成員之間的溝通,可以更方便地實現下文中將要提到的螺旋模型,從而成功實施Web工程。
結構化方法是將一個復雜的大型系統自頂向下地分解成一個個簡單的系統,用系統工程的思想和工程化的模式對系統進行功能分解和結構設計,從內部功能上模擬客觀世界。結構化方法包括結構化分析(SA)方法、結構化設計(SD)方法、結構化編程(SP)方法。根據分析方法的不同,又可分為面向數據流的和面向數據結構的兩大類。本文所討論的是開發步驟明確、適用范圍更廣的面向數據流的結構化軟件開發方法。
面向數據流的結構化軟件開發方法使用由簡單易讀的圖形符號構成的數據流圖表達,根據系統內部的數據傳遞和變換關系,自頂向下逐層分解,描繪出滿足功能要求的系統邏輯模型。設計階段依據模塊獨立性準則、軟件結構準則(軟件結構包括變換型和事務型兩種典型類型),將數據流圖轉換為應用系統的體系結構,進而建立系統的物理模型,實現系統的概要設計[4]。
當然,這里所強調的結構化方法是指使用結構化方法中的結構化分析和結構化設計,而在編碼實現階段,完全可以借助面向對象的可視化編程工具,根據實際需要準確地抽取底層級別的對象并設計基類,從而利用繼承、重載等機制高質量地重用代碼,簡化結構,降低維護難度。這一點在應用螺旋模型的系統開發過程中,不斷循環調整結構、優化代碼以實現收斂逼近最優結果時顯得尤為重要。
3.2.2 應用螺旋模型
隨著大量傳統軟件系統的開發實踐和經驗積累,多種軟件工程方法被總結出來,而且對它們進行了模型化,從而將相關方法從實踐上升到理論。而基于Web的應用系統,同樣作為一種軟件系統,也可以借鑒應用這些模型,從中吸取有益的經驗,以便更有效、更便捷地實施Web工程。螺旋模型正是這樣一種同時適用于Web工程的軟件開發模式[6]。
由于Web系統的即時性和持續演化性,使得需要一個迭代的、增量的過程模型。因為Web系統作為一個開放的系統,其用戶的形式具有多樣性,需要迎合具有不同技術和能力的用戶,復雜化人機接口,用戶界面和信息提交。而且基于Web的系統將連續關注視覺和感覺,強調感官舒服,在多種程度上與多媒體結合。因此用戶在開發早期很難清楚地提供系統的完整需求,開發人員也很難在系統開發的需求分析階段完全正確地領會和定義用戶所提出的各項需求。而只有當軟件成品擺放在用戶面前時,用戶才能更加確認需求,進而激發新的需求甚至更改需求。這就很容易造成開發出的Web系統需要付出高昂代價的后期需求變動,甚至導致項目失敗。
應用螺旋模型[4]這一基于原型化開發的進化模型則可以很有效地解決這種問題。這種開發模型是自內向外以螺旋狀的形式進化發展,每一個周期都要經過計劃、分析、設計實現、用戶反饋等環節,每一次循環的結果都生成一個增強的軟件版本,如圖3.2所示。

圖3.2 螺旋模型示意圖[6]
由圖中看出螺旋模型不是等一個開發階段的工作完成以后才開始下一個階段的工作,而是把傳統的分階段的軟件開發方法融入到每一次螺旋循環當中,生成用于驗證預定用戶需求和可能的設計方案的中間系統原型,并通過用戶對原型的意見反饋探索和揭示新的需求。一旦獲得新的信息,就對原型進行調整,除了進一步求精外,還追加實現某些新的、已明確的用戶需求,從而進入新一輪的螺旋循環,逐步逼近最優結果。需要注意的是,這種循環分析設計活動不僅針對整個應用系統的開發,而且可以同時在不同的模塊開發中并行進行。
應用螺旋模型這種用戶驅動的開發模式,滿足了Web工程以用戶為中心的開發要求,使用戶最大程度地參與到軟件的開發過程中并起主導作用,可以在中間系統原形的基礎上進一步清楚的闡述自己的微觀需求,這樣也使開發者可以真正了解用戶的需求,并能對用戶的動態需求作出及時的有效的處理,使開發出來的系統更易于被用戶接受,有利于縮短開發周期,降低開發風險。
四、MVC模式在Web開發過程中的應用
4.1 MVC設計模式簡介
MVC模式就是一種目前廣泛流行的設計模式.它是Xerox PARC在20世紀80年代為編程語言Smalltalk-80發明的一種軟件設計模式舊。MVC是Model-View-Controller的簡稱。即模型-視圖-控制器[8]。MVC包括三類對象.模型Model是應用對象.視圖View是它在屏幕上的表示,控制器Controller定義用戶界面對用戶輸入的響應方式。如圖4.1所示.
視圖(View)代表用戶交互界面,對于Web層來說,可以概括為HTML界面,也有可能為XHTML、XML和Applet。模型(Mode1)是業務流程,狀態的處理以及業務規則的制定。業務流程的處理過程對其它層來說是黑箱操作,模型接受視圖請求的數據.并返回最終的處理結果。業務模型的設計是MVC最主要的核心。業務模型還有一個很重要的模型就是數據模型。數據模型主要指實體對象的數據保存(持久化)。控制器(Controller)可以理解為從用戶接收請求.將模型與視圖匹配在一起。共同完成用戶的請求。

圖4.1 MVC模式示意圖
4.2 MVC設計模式在J2EE中的實現
為了更清楚地說明問題,下面介紹MVC設計模式在J2EE架構中的實現。盡管MVC設計模式很早就出現了,但在WebApp中引入MVC確實非常困難的。主要原因是在早期的Web應用的開發中,程序設計語言和HTML的分離一直難以實現,從而執行業務邏輯的程序代碼和執行表示的程序代碼混雜在一起,因而很難分離出單獨的業務模型。
為了解決以上問題,Sun公司先后制定了兩種規范,稱為JSP Model1和JSP Model2。雖然Model1在一定程度上實現了MVC,但是它的運用并不理想,直到基于J2EE的JSP Model2出現才得以改觀。JSP Model2技術用JSP技術實現視圖的功能,用Servlet技術實現控制器的功能,用JavaBean技術實現模型的功能[8]。

圖4.2 JSP Model2示意圖
如圖4.2所示,JSP Model2體系結構是一種聯合使用JSP和Servlet來提供動態內容服務的方法。它吸取了JSP和Servlet兩種技術各自的突出優點,用JSP生成表示層的內容,讓Servlet來完成深層次的處理任務。它清晰地分離表達和內容,明確了角色定義以及開發者與網頁設計者的分工。
4.1 MVC模式應用于Web工程過程中的優勢
在詳細的MVC設計模式后,可以看出MVC模式可以滿足Web工程的網絡集約性,內容驅動性和持續演化性的要求。首先,多個視圖共享一個模型,從而使得同一個Web應用程序可以提供多種用戶界面。例如用戶希望既能通過瀏覽器來收發電子郵件,又能通過手機來訪問電子郵箱,這就要求Web網站同時提供Internet界面和WAP界面[8]。在MVC設計模式中,模型返回用戶請求并返回響應數據,視圖負責格式化數據并把它們呈現給用戶,業務邏輯和表示層分離,同一個模型可以被不同的視圖重用,這樣就能夠滿足Web工程的網絡集約性要求,即同時服務于變化多樣的客戶群落。
其次,模型是自包含的,與控制器和視圖保持相對獨立,所以可以方便的改變應用程序的數據層和業務規則。如將數據庫從MySQL移植到Oracle,或者把RDBMS數據源改變成LDAP數據源,只需要改變模型即可,一旦正確的實現了模型,視圖都會正確的顯示它們。由于MVC的三個模塊相互獨立,所以能夠構造良好的松耦合的構件。從而滿足Web工程的內容驅動性要求,可以方便的對數據進行管理。
此外,控制器提高了應用程序的靈活性和可配置性。控制器可以用來連接不同的模型和視圖去完成用戶的需求,也可以為構造應用程序提供強有力的手段。給定一些可重用的模型和視圖,控制器可以根據用戶的需求去選擇適當的模型進行處理,然后選擇適當的視圖將結果顯示給用戶。因而滿足Web工程的持續演化性需求,當用戶的需求發生改變時,只需要對其中的具體模型或視圖進行修改即可,而整個系統的結構不需要變化。
五、總結
文章首先討論了Web工程的各種屬性以及開發Web工程的各種特性,然后討論了運用結構化的分析和設計方法來開發Web工程,并將螺旋模型,這一迭代的、增量的過程模型應用到Web工程開發中,從而使得開發者可以真正了解用戶的需求,并能對用戶的動態需求做出及時的有效的處理,使開發出來的系統更易于被用戶接受,有利于縮短開發周期,降低開發風險。最后討論了目前廣泛流行的MVC設計模式在Web工程中的應用,可以看出MVC模式的應用使得螺旋模型得到更好的實施,能夠讓軟件在健壯性、代碼重用和結構方面上一個新的臺階,大大提高軟件開發的效率。
參考文獻
[1] 張友生. Web工程實踐研究[J]. 小型微型計算機系統,2004,7
[2] 張友生. Web工程過程研究[J]. 計算機工程與應用,2003,2
[3] Zelnick N.Nifty technology and nonconformance:The Web in crisis[J] .Computer,1998(10):115—119.
[4] (美)Roger S. Pressman 著,梅宏 譯,軟件工程--實踐者的研究方法[M],北京:機械工業出版社·2002,9
[5] Hansen S,Deshapande Y and M urugesan S. A classification based on skill hierarch for Web information system players [c].Proc ICSE Workshop on W eb Engineering.1999.
[6] 董寒松、李錚、尤楓、趙恒永. 基于結構化方法和螺旋模型實施Web工程的探究[J]. 微型機與應用,2005,11
[7] 張瓊聲、龐緒峰. Web工程及其應用[J]. 油氣田地面工程,2003,10
[8] 孫衛琴 著,精通Struts:基于MVC的Java Web設計與開發[M],北京:電子工業出版社·2004,8
[9] Gamma E著,李英軍,馬曉星,蔡敏等譯.設計模式:可復用面向對象軟件的基礎.北京:機械工業出版社,2000
Author: orangelizq
email: orangelizq@163.com
posted on 2007-09-30 10:23
桔子汁 閱讀(1838)
評論(0) 編輯 收藏 所屬分類:
WebService 技術