在ASP.NET中實現Model-View-Controller模式(二)
MVC模式形容這種實現方式是一種被動的實現機制,ASP.NET充當了程序執行中的控制器的角色,但程序員必須將具體的事件處理方法添加到事件的響應函數中。如在這個例子中,控制器在頁面加載之前調用Page_Load函數并執行其中的代碼,當用戶點擊Submit按鈕時由系統調用SubmitBtn_Click函數并執行。
這種將代碼都包含在一個文件中的實現方式非常的直接,而且當應用程序很小并不經常修改的時候也可以說是一種好的方法,但是如果下面的一些情況出現的話你也許會開始考慮修改這種實現方法:
使編程的工作并行并減少由此帶來的發生錯誤的可能性。為了增加工作的并行性,提高效率,你可能想讓不同的人編寫視圖的代碼及模型代碼并盡力減少這種工作方式所帶來的出錯的可能性。例如:當所有的代碼都在一個文件中的話,那么一個編程人員可能會在改變DataGrid顯示格式的時候無意中修改數據訪問的代碼。這種錯誤是很難被發現的,直到頁面整體被編譯的時候才會顯現出來。。
使你的數據訪問代碼在其它頁面中重用。在這種單文件的實現方式中,除了拷貝代碼,沒有其它的方法能夠做到代碼的重用。拷貝的代碼是很難被維護的,因為一旦代碼發生了變化,你必須在所有的頁面都進行修改。
為了避免上面這些情況的發生,ASP.NET引入了代碼分離(Code-behind)機制。
用代碼分離機制進行重構
Microsoft Visual Studio .NET中的代碼分離機制使視圖層的代碼與模型及控制器的代碼能夠很容易的分離。每個ASP.NET頁面都有一種機制,能夠使其要調用的方法在一個與其分離的類中實現。這種方式使用起來非常的方便,而且也可以利用Visual Studio .NET中的一些其它特性共同完成開發工作。比如如當你利用代碼分離的機制開發你的頁面的時候,可以利用智能感知(IntelliSense technology)顯示出一個可用方法的列表方便編程。而智能感知技術在.aspx頁面中是不能使用的。
下面給出的是上面例子利用代碼分離機制的實現。
視圖部分:
視圖層的代碼現在一個單獨的文件中實現。Solution.aspx:
<%@ Page language="c#" Codebehind="Solution.aspx.cs"
AutoEventWireup="false" Inherits="Solution" %>
<html>
<head>
<title>Solution</title>
</head>
<body>
<form id="Solution" method="post" runat="server">
<h3>Recordings</h3>
Select a Recording:<br/>
<asp:dropdownlist id="recordingSelect" runat="server" />
<asp:button id="submit" runat="server" text="Submit"
enableviewstate="False" />
<p/>
<asp:datagrid id="MyDataGrid" runat="server" width="700"
backcolor="#ccccff" bordercolor="black" showfooter="false"
cellpadding="3" cellspacing="0" font-name="Verdana" font-size="8pt"
headerstyle-backcolor="#aaaadd" enableviewstate="false" />
</form>
</body>
</html>
大部分代碼都與前面的解決方案的代碼相同。主要的不同點是第一行:
<%@ Page language="c#" Codebehind="Solution.aspx.cs"
AutoEventWireup="false" Inherits="Solution" %>
這行告訴ASP.NET執行環境,這個頁面的具體實現機制在一個單獨的類中。因為這個頁面是獨立的,因此如果數據訪問的代碼發生變化,這個頁面并不需要做任何改動。同樣,一些設計師也可以改變這個頁面的代碼而不會引起任何數據訪
|