.NET初學者架構設計指南(四)Model-View-Controller

作者: 小陸  來源: 博客園  發布時間: 2008-09-10 14:38  閱讀: 8639 次  推薦: 0   原文鏈接   [收藏]  
 

系列文章導航:

.NET初學者架構設計指南(一)Hello world的時代

.NET初學者架構設計指南(二)OO設計初次見面

.NET初學者架構設計指南(三)設計模式

.NET初學者架構設計指南(四)Model-View-Controller

 

  Model-View-Controller簡稱為MVC,這是圖形界面(GUI)應用程序的一種架構形式。Model是業務領域層,比如我們在前面兩篇里面提到的Account、Entry、Bill、Invoice之類的對象,這些類構成了一個電信賬務系統的業務領域層;View就是用戶界面;Controller是指用戶界面和業務對象之間的控制器,控制器的作用是從業務對象中獲取數據顯示到用戶界面上,并且從界面上收集用戶的輸入和動作,然后調用業務對象完成業務功能。

 

  大部分軟件系統的工作可以總結成下面這樣的流程:從存儲數據的地方取得數據,把他們顯示在用戶界面上,然后用戶在界面上修改這些數據,再把數據寫回存儲。數據在存儲和界面之間來回流動。這種看似簡單的分析方式經常讓開發者有這樣一種沖動:把界面和數據寫在一起,這樣可以少很多層次,少寫很多代碼,也可以減少運行過程的環節,似乎可以加快程序的運行效率。但是實際上,這種直來直去的煙囪式系統不能很好的隔離界面和業務代碼,在開發和維護的過程中會帶來很多麻煩。

 

  把程序的界面和業務代碼分離開會帶來很多好處。一般的說來,界面比起業務邏輯來變化來的更加頻繁一些,修改界面的時候,不應該對業務代碼造成影響;開發這兩個部分所使用的技巧也有很大的差別;在有些系統里面,需要為同一個功能開發多種界面,比如一個Windows窗體界面給后臺管理人員使用,一個Web頁界面提供給廣大人民群眾,還需要做一個適用于PDA瀏覽器的界面,如果界面和業務代碼是混雜在一起的,多種界面的開發就需要做很多重復性的工作;把界面和業務代碼分離開也使可以為自動化的單元測試提供很多方便,要對用戶界面創建單元測試代碼是十分繁雜的,而對業務代碼做單元測試則是簡單的,也是必要的。

 

  于是有經驗的開發者會在設計程序的時候創建一個業務領域層,在這個層次中有很多業務對象,他們直接體現了業務需求的核心。用戶界面層不是自己實現業務功能,而是調用后臺的業務對象。用戶界面向用戶展示業務對象的屬性,并且捕獲用戶的輸入,調用業務對象的方法實現各種功能需求。當業務邏輯層和用戶界面層都具備了以后,剩下的一個問題就是:如何把這兩個層次粘和起來——這就是控制器需要做的工作。

 

  最簡單的控制方式就是直接在界面中調用業務對象,這種方式稱為Model-View模式。

  Model-View模式在界面和業務模型之間建立了一種最簡單的依賴關系,界面直接調用業務模型,模型通過消息這樣的松耦合方式修改界面上的表示內容(比如上一篇里面使用C#語言中的事件實現告警在界面上的顯示)。這樣可以實現層次的分離,對改善軟件系統的構架是有一定的幫助的。

 

  使用過Microsoft Visual Studio各個版本的開發者一定對Model-View的控制方式非常熟悉,無是在VB、VC,還是后來的C#、ASP.NET中,我們把一個按鈕控件拖放到窗體上,然后鼠標點擊這個控件,就會自動生成一段事件響應代碼。下面是用這種方式編寫的一段程序,這是“非洲電信公司賬務系統”的一個界面,營業員使用這個界面為用戶繳費:

 

  營業員在“號碼”輸入框里面填寫用戶的電話號碼,在“金額”輸入框里填寫需要交的金額,然后點擊“提交”按鈕,就可以把錢交進賬戶。如果發生了異常情況,程序會出現提示。

 

  按下“提交”按鈕的時候,按鈕發出Click事件,窗體可以捕獲這個事件,采取響應行動。控制器就是用這樣的機制實現的。

Code
0
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()