• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            We do not always find visible happiness in proportion to visible virtue

            夢幻白樺林

            SHARE

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              14 Posts :: 58 Stories :: 62 Comments :: 0 Trackbacks

            公告

            常用鏈接

            留言簿(5)

            搜索

            •  

            最新隨筆

            最新評論

            閱讀排行榜

            面向對象的設計模式是經驗的總結,MVC思想是原先用于構建用戶界面的。這篇文章主要論述了如何在新的Web應用領域中使用設計模式和MVC架構。文章首先介紹了設計模式的概念和特點,以及MVC架構的設計思想,并分析了MVC架構中包含的幾種主要的模式。然后根據Web應用系統的特點,就如何應用模式和MVC架構提出了一些設計思路。

            1. 引言
            1.1 設計模式

            面向對象技術的出現和應用大大提高了軟件的重用性和軟件的質量。面向對象的編程也比以往的各種編程模式要簡單和高效,但是面向對象的設計方法要比以往的設計方法要復雜和有技巧得多,一個良好的設計應該既具有對問題的針對性,也充分考慮到對將來問題和需求有足夠的通用性。在過去的十幾年中,人們在對面向對象技術的研究探索和實際應用中針對某些問題創造了一些良好的解決方案,即所謂的面向對象的設計模式。面向對象技術的目的之一就是提高軟件的重用性,而對設計模式、設計方案的重用則從更深的層次上體現了重用的意義和本質。
            人們對設計模式有很多定義,其中被引用的最多是Christopher Alexander的設計模式的定義:每一個設計模式是一個三方的規則,它表達了一個上下文環境(Context),一個問題和一個解決方案。設計模式一般有如下幾個基本要素:模式名稱,問題,目的,解決方案,效果,樣例代碼和相關設計模式。
            設計模式的分類有好幾種,可以根據其目的分為創建型(Creational),結構型(Structural)和行為型(Behavioral)三種。創建型模式主要是用來創建對象,結構型模式主要是處理類或對象的組合,行為型模式則主要用來描述對類或對象怎樣交互和怎樣分配職責。也可以根據范圍將設計模式分為類模式和對象模式,類模式處理類和子類之間的關系,這些關系通過繼承建立,在編譯時刻就被確定下來,是屬于靜態的。對象模式是處理對象間的關系,這些關系在運行時刻變化,更具動態性。
            模式的特點:是通過經驗獲取的,以某種結構化的格式書寫下來,避免了遇到相同的問題重頭設計,存在于不同的抽象層,在不斷完善的,是可重用的人工產物,使設計和最好的練習交互,以被組合起來解決更大的問題。

            1.2 MVC架構
            MVC最初是在Smalltalk-80中被用來構建用戶界面的。M代表模型Model, V代表視圖 View, C代表 控制器Controller。
            MVC的目的是增加代碼的重用率,減少數據表達,數據描述和應用操作的耦合度。 同時也使得軟件可維護性,可修復性,可擴展性,靈活性以及封裝性大大提高。
            單用戶的應用通常是以事件驅動的用戶界面為組織結構的。開發人員用一個界面工具畫了一個用戶接口界面,然后編寫代碼根據用戶輸入去執行相應的動作,許多交互式的開發環境鼓勵這么做,因為它強調先有界面然后再有功能。一些軟件設計模式策略是這樣的,然后經常將固定后的代碼融入最后的系統當中。導致的結果就是,程序組織圍繞用戶界面元素和用戶在那些界面元素上的動作,數據的存儲,應用的功能以及用來顯示的代碼都雜亂無章的纏繞在一起。在單用戶的系統里代碼結構是可以這樣的,因為系統需求不會頻繁變化。但是對一個大的系統如大型Web系統,或電子商務系統來說就不太適用了。
            通過把數據模式從各種可以被存取和控制的數據中分離出來可以改善分布式系統的設計。MVC設計模式由三部分組成。模型是應用對象,沒有用戶界面。視圖表示它在屏幕上的顯示,代表流向用戶的數據。控制器定義用戶界面對用戶輸入的響應方式,負責把用戶的動作轉成針對Model的操作。Model 通過更新View的數據來反映數據的變化。
            三者關系如圖:


            對MVC關系圖的理解

            圖2 MVC的分工與協作

            2. MVC中的設計模式
            一個以MVC為架構的系統包含了很多的設計模式,但是與MVC最為密切相關的是下面三種模式:Observer, Composite和Strategy。
            2.1 Observer模式
            MVC通過使用定購/通知的方式分離了Model和View。View要保證自己顯示能正確地反映出Model的內容和狀態。一旦Model的內容發生變化,必須有一個機制來使得Model能夠通知相關的View,使得相關的View可以在適當的時機刷新數據。這個設計還可以解決更一般的問題,將對象分離,使得一個對象的改變能夠影響到另一些對象,而這個對象并不知道那些被影響的對象的細節。這就是被描述為Observer的設計模式。
            模式類型:Observer模式是對象型模式,同時它也是行為型模式。
            模式目的:定義對象間的一對多的依賴關系,當一個對象的值或狀態發生改變時,所有與它有依賴關系的對象都得到通知并自動更新。某一數據可能有多種顯示方式,并且可能同時以不同的方式顯示(如圖2)。當通過某一種方式改變了數據,那么其他的顯示都應該能立即知道數據的改變和做相應的調整。
            模式結構:

            圖 3. Observer模式的結構圖

            效果:
            1. 抽象耦合。目標對象只知道它有一些觀察者,每個觀察者都符合抽象的Observer類的簡單接口,并不知道它們具體屬于哪個類。這樣使得目標和觀察者之間的耦合最小且抽象。
            2. 支持廣播通信。目標發送通知不用指定觀察者,如何處理通知由觀察者決定。
            3. 可能的意外更新。要處理好更新邏輯,避免錯誤更新。

            2.2 Composite模式
            MVC的一個重要特征就是View可以嵌套。嵌套的組合視圖可用于任何視圖可用的地方,而且可以管理嵌套視圖。這種思想反映出將組合的視圖與其組件平等對待的設計。這種設計思想在面向對象領域內被描述成為Composite的設計模式。
            模式類型:Composite模式是對象型模式,同時它也是結構型模式。
            模式目的:將對象組合成樹形結構以表示"部分-整體"層次結構。Composite使組合對象的使用和單個對象的使用具有一致性。
            模式結構:

            圖4. Composite模式的結構圖
            效果:
            1. 定義了包含簡單對象和組合對象的類層次結構。簡單對象可以被組合到復雜對象中,而組合的對象可以再被組合。這樣客戶端代碼中用到簡單對象的地方都可以使用組合對象。
            2. 簡化客戶端代碼。客戶端不用知道某對象是簡單對象還是組合對象,可以以一致的方式使用這些對象。
            3. 更容易增加新類型的組件。新的組件可以方便地加入已有組合對象中不用改變客戶端代碼。

            2.3 Strategy模式
            MVC的另一重要特征是可以在不改變View的情況下改變View對用戶輸入的響應方式。這對一個經常需要變更響應邏輯的系統來說是非常重要的。MVC把響應邏輯封裝在Controller中。有一個Controller的類層次結構,可以方便地對原有Controller做適當改變,創建新的Controller。View使用Controller子類的實例來實現一個特定的響應策略。要實現不同的響應策略,只要用不同種類的Controller實例替換即可。還可以在運行時刻通過改變View的Controller來改變View對用戶輸入的響應策略。這種View-Controller的關系是被描述為Strategy的設計模式的一個例子。
            模式類型:Strategy模式是對象型模式,同時它也是行為型模式。
            模式目的:定義一系列的算法,并且把它們封裝起來,使它們可以互相替換,使得算法可以獨立于使用它的客戶端而變化。
            模式結構:

            圖5. Strategy模式的結構圖

            效果:
            1. Strategy類層次為Context定義了可重用的相關算法或行為。
            2. 替代繼承的方法。如果直接繼承Context,給以不同的行為,會將行為加到Context中,從而將算法的實現與Context混合起來,使Context難以理解,維護和擴展,而且不能動態地改變算法。將算法封裝在獨立的Strategy類,可以使得算法獨立于Context改變,容易切換擴展。
            3. 可以提供相同行為的不同實現。
            4. 客戶端必須了解Strategy之間有何不同。
            5. Context和Strategy之間的通信開銷。
            6. 增加了對象的數目。

            3. MVC在 Web系統中的應用
            現在的一些基于Web的分布式系統如B2B電子商務系統,就適合采用MVC架構。
            通過分析,從高層次的角度可以將一個應用的對象分為三類。一類就是負責顯示的對象,一類對象包含商業規則和數據,還有一類就是接收請求,控制商業對象去完成請求。這些應用的顯示是經常需要變換的,如網頁的風格,色調,還有需要顯示的內容,內容的顯示方式等。而商業規則和數據是相對要穩定的。因此,表示顯示的對象View經常需要變化的,表示商業規則和數據的對象Model要相對穩定,而表示控制的Controller則最穩定。
            通常當系統發布后,View對象是由美工,HTML/JSP設計人員或者系統管理員來負責管理的。Controller對象由應用開發人員開發實施,商業規則對象和商業數據對象則由開發人員,領域專家和數據庫管理員共同完成的。顯示邏輯在Web層或客戶端控制,可以是Servlet 或JSP,動態地生成Html。一般來說采用JSP要比采用Servlet要好。JSP更好地將代碼與Html部分分開,有利于頁面設計人員和代碼開發人員的分離,提高效率。同時JSP可以完成所有Servlet完成的功能,實際上JSP最終也轉換成一個Servlet。與控制有關的對象存在于系統的每一個層次,協調跨層動作。包含商業規則和數據的對象存在于EJB層(以EJB為中心的模式)或Web層(以Web為中心的模式)。

            3.1 View在Web系統中的應用
            View代表系統的顯示,它完全存在于Web層。一般由JSP, Java Bean和Custom Tag組成。JSP可以動態生成網頁內容,Custom Tag 更方便了使用Java Bean,而且它可以封裝顯示邏輯,更有利于于模塊化和重用。一些設計良好的Custom Tag可以在多個JSP甚至可以在不同的系統里重復使用。Java Bean用來控制JSP和Model對象。JSP通過Java Bean 來讀取Model對象中的數據,Model和Controller對象則負責對Java Bean的數據更新。一般來說,可以先要設計出所有可能出現的屏幕,即用戶使用系統時可以看到的所有內容。然后根據這些內容,找出公共部分,靜態部分和動態變化部分。可以考慮使用模板方法,把公用的內容單獨生成JSP,需要變化的也各自生成Html或JSP, 由一個模板JSP, 把這些不同部分動態地引入(include方法)。還有一個要考慮的問題就是屏幕的選擇問題,當處理完用戶請求,模板被自動調用來顯示,這個顯示一定要知道用戶關心的屏幕是有哪些部分組成。所以可以考慮把所有屏幕的定義放在一個集中的文件里,如一個java文件或文本文件。由于考慮到屏幕定義文件將來的變更可能性,最好使用文本文件如一個XML文件,這樣將來更改不用重新編譯。可以根據用戶輸入的URL和參數可以映射到某一個結果屏幕,當然有可能還要根據動作的執行結果選擇不同的結果屏幕內容。所以需要一個請求與資源的匹配文件(XML),如果一個URL請求有幾種不同結果,則要在該文件中指明是否需要流控制(一種controller對象)以及不同流向的對應屏幕。

            3.2 Model在Web系統中的應用

            Model對象代表了商業規則和商業數據,存在于EJB層和Web層。在J2EE的規范中,系統有些數據需要存儲于數據庫中,如用戶的賬號信息(account model),公司的數據(company model)等,也有一些不需要記錄在數據庫里的,如某用戶瀏覽的當前產品目錄(catalog model),他的購物內容(shopping cart model)等。這些model數據存在于哪一層要根據它們的生命周期和范圍來決定。在Web層有HttpSession和ServletContext及Java Bean對象來存儲數據,在EJB層則有EJB來存儲數據和邏輯。Web層的Java Bean的model對象存儲了EJB層model對象的數據的拷貝。因為EJB層有很多不同的model對象,所以Web層可以通過一個ModelManager來控制EJB層的各model對象,在ModelManger中可以封裝使用后臺model對象的方法。
            在EJB層把所有的數據和規則都模式化為EJB也是不恰當的。如可以把存取數據庫的對象模式化為DAO對象。DAO中可以封裝與具體數據庫的交互細節,如可以讀寫不同的表,多個數據庫,甚至多種數據庫。如定單的model對象可以是一個OrderDAO, 它可能要同時處理Order表,OrderStatus表和OrderItemLines表。
            還有可以考慮使用Value對象。一個Value 對象可以封裝遠程對象,因為每一個讀遠程對象的屬性都可能是一個遠程過程調用,都會耗費網絡資源。可以在EJB的遠程對象中使用Value對象. 在遠程對象中一次性得到Value對象來得到所有屬性的值。

            3.3 Controller在Web系統中的應用
            Controller對象協調Model與View,把用戶請求翻譯成系統識別的事件。在Web層,一般有一個MainServlet(或Main.jsp),接收所有請求,它可以調用屏幕流管理器(ScreenFlowManger)決定下一個屏幕。一般還有一個請求處理器RequestProcessor,包含所有請求都需要做的處理邏輯,如把請求翻譯成系統事件(RequestToEvent)。請求處理器通常還包含一個代理對象ClientControlWebImpl,它是EJB層的邏輯處理的在Web層的代理。在EJB層,有一個ClientController提供Web 層對EJB層的只讀訪問。還有一個StateMachine用來建立和刪除ejb,處理Web層送來的事件。
            Controller還有一個重要的功能就是同步View和Model的數據。在ModelManger中包含一個ModelUpdateManger,它把系統事件轉換為一個Model的集合,即所有需要同步的Model,然后通知Listeners去做同步操作。

            4. 結束語
            近年來隨著互聯網技術的發展和新的商業模式的出現,必然會出現大量基于Web的應用系統。對于如何設計這些系統的體系結構,也逐漸有了一些統一的認識,最主要的是的就是其體系結構要合理,開放。需求永遠會比技術和設計思想發展快,要使將來系統的升級所付出的代價最小,研究軟件系統的體系結構還是非常很用和有必要的。

            參考文獻
            [1] 設計模式,作者Erich Gamma 等,ISBN 7-111-07575-7, 機械工業出版社 2000.9
            [2] Core J2EE Patterns, 作者Deepak Alurm 等, ISBN 0-13-064884-1, Sun Microsystems Inc, 2001年
            [3] Designing Enterprise Applications with the J2EETM Platform, 作者Nicholas Kassem 等, Sun Microsystems, Inc. 2000年

            posted on 2007-05-15 09:12 colys 閱讀(480) 評論(0)  編輯 收藏 引用

            欧美午夜A∨大片久久| 久久精品毛片免费观看| 99精品久久久久久久婷婷| 中文字幕精品久久| 2021精品国产综合久久| 精品水蜜桃久久久久久久| 国产成人精品三上悠亚久久| 看久久久久久a级毛片| 久久AV高潮AV无码AV| 99久久精品国产综合一区| 久久热这里只有精品在线观看| 久久ww精品w免费人成| 国产精品久久成人影院| 国产精品99久久久精品无码| 久久99国产精品久久99果冻传媒| 精品少妇人妻av无码久久| 亚洲国产成人久久一区久久| 久久久国产乱子伦精品作者| 色播久久人人爽人人爽人人片AV| 热久久国产精品| 国产成人精品久久一区二区三区av| 久久精品国产亚洲欧美| 欧美日韩久久中文字幕| 国产成人99久久亚洲综合精品| 久久91精品国产91久久户| 久久久无码精品亚洲日韩蜜臀浪潮 | 模特私拍国产精品久久| 久久er热视频在这里精品| 久久成人国产精品免费软件| 色99久久久久高潮综合影院| 久久精品国产只有精品2020| 久久久久亚洲av无码专区导航 | 伊人 久久 精品| 日韩va亚洲va欧美va久久| 岛国搬运www久久| 国内精品久久久久| 99久久99久久精品国产片| www性久久久com| 人人狠狠综合久久亚洲婷婷 | 久久天天婷婷五月俺也去| 精品久久久久久久久久中文字幕|