在ASP.NET中实现Model-View-Controller模式(四)
点击次数:27 次 发布日期:2008-11-26 13:53:36 作者:源代码网
|
源代码网推荐 模型-视图-控制器分离的重构 源代码网推荐 源代码网推荐 为了解决上面所遗留的问题,你必须将模型与控制器角色分离。 源代码网推荐 源代码网推荐 视图的实现代码与前部分相同。 源代码网推荐 源代码网推荐 模型 源代码网推荐 源代码网推荐 下面的代码例子使模型角色仅仅依赖于数据库,而不包含任何与视图相依赖的代码。 源代码网推荐 源代码网推荐 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; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 现在的代码只依赖于数据库,这个类是一个优秀的数据库的通道,它持有访问表或视图的所用的SQL语句,其它的代码调用一些方法来完成与数据库的交互。 源代码网推荐 源代码网推荐 控制器 源代码网推荐 源代码网推荐 这种重构方式利用代码隐藏机制,在负责数据访问的模型部分相对独立的情况下,由控制器负责事件与方法的控制工作。模型的任务很明确的,它仅返回一个DataSet对象。这种实现方式就像视图代码一样,不依赖于数据是如何从数据库中返回的。 源代码网推荐 源代码网推荐 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 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
