在ASP.NET中完成MVC模式(4)
發(fā)表時(shí)間:2023-08-05 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在ASP.NET中實(shí)現(xiàn)Model-View-Controller模式(四)模型-視圖-控制器分離的重構(gòu)為了解決上面所遺留的問題,你必須將模型與控制器角色分離。視圖的實(shí)現(xiàn)代碼與前部分相同。模型下面的代...
在ASP.NET中實(shí)現(xiàn)Model-View-Controller模式(四)
模型-視圖-控制器分離的重構(gòu)
為了解決上面所遺留的問題,你必須將模型與控制器角色分離。
視圖的實(shí)現(xiàn)代碼與前部分相同。
模型
下面的代碼例子使模型角色僅僅依賴于數(shù)據(jù)庫,而不包含任何與視圖相依賴的代碼。
using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
public class DatabaseGateway
{
public static DataSet GetRecordings()
{
String selectCmd = "select * from Recording";
SqlConnection myConnection =
new SqlConnection(
"server=(local);database=recordings;Trusted_Connection=yes");
SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "Recording");
return ds;
}
public static DataSet GetTracks(string recordingId)
{
String selectCmd =
String.Format(
"select * from Track where recordingId = {0} order by id",
recordingId);
SqlConnection myConnection =
new SqlConnection(
"server=(local);database=recordings;Trusted_Connection=yes");
SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "Track");
return ds;
}
現(xiàn)在的代碼只依賴于數(shù)據(jù)庫,這個(gè)類是一個(gè)優(yōu)秀的數(shù)據(jù)庫的通道,它持有訪問表或視圖的所用的SQL語句,其它的代碼調(diào)用一些方法來完成與數(shù)據(jù)庫的交互。
控制器
這種重構(gòu)方式利用代碼隱藏機(jī)制,在負(fù)責(zé)數(shù)據(jù)訪問的模型部分相對獨(dú)立的情況下,由控制器負(fù)責(zé)事件與方法的控制工作。模型的任務(wù)很明確的,它僅返回一個(gè)DataSet對象。這種實(shí)現(xiàn)方式就像視圖代碼一樣,不依賴于數(shù)據(jù)是如何從數(shù)據(jù)庫中返回的。
using System;
using System.Data;
using System.Collections;
using System.Web.UI.WebControls;
public class Solution : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button submit;
protected System.Web.UI.WebControls.DataGrid MyDataGrid;
protected System.Web.UI.WebControls.DropDownList recordingSelect;
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
DataSet ds = DatabaseGateway.GetRecordings();
recordingSelect.DataSource = ds;
recordingSelect.DataTextField = "title";
recordingSelect.DataValueField = "id";
recordingSelect.DataBind();
}
}
void SubmitBtn_Click(Object sender, EventArgs e)
{
DataSet ds =
DatabaseGateway.GetTracks(
(string)recordingSelect.SelectedItem.Value);
MyDataGrid.DataSource = ds;
MyDataGrid.DataBind();
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.submit.Click += new System.EventHandler(this.SubmitBtn_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}