之前介绍过MVC(Model-View-Controller)这里举一个具体的例子说明(C#)
View部分:
界面:
这是一个登入的界面
textbox1:txtName
textbox2:txtPwd
button1:btnSubmit
label1:lblMsg
Model部分:
下面添加两个类库(ToEmail.Rule、ToEmail.DataAccess):
ToEmail.DataAccess同理添加。
这里先建立数据库(Sales),表(Login_Info),字段(UserName、UserPwd)
下面是ToEmail.DataAccess模块代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace ToEmail.DataAccess
{
public class UserDataAccess
{
SqlConnection Conn;
SqlDataAdapter UserDa;
public UserDataAccess()
{
Conn = new SqlConnection("server=(local);database=Sales;user id=sa;pwd=123456");
}
/// <summary>
/// 校验用户是否可以登入
/// </summary>
/// <param name="name">用户名</param>
/// <param name="pwd">密码</param>
/// <returns>DataSet</returns>
public DataSet UserLogion(string name, string pwd)
{
DataSet UserDs = new DataSet();
string sql = "select * from Login_Info where UserName=@UserName and UserPwd=@UserPwd";
UserDa = new SqlDataAdapter();
UserDa.SelectCommand = new SqlCommand(sql, Conn);
UserDa.SelectCommand.Parameters.Add(new SqlParameter("@UserName", SqlDbType.NVarChar, 50));
UserDa.SelectCommand.Parameters["@UserName"].Value = name;
UserDa.SelectCommand.Parameters.Add(new SqlParameter("@UserPwd", SqlDbType.NVarChar, 50));
UserDa.SelectCommand.Parameters["@UserPwd"].Value = pwd;
UserDa.Fill(UserDs);
return UserDs;
}
}
}
在ToEmail.Rule中添加引用:
ToEmail.Rule代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using ToEmail.DataAccess;
namespace ToEmail.Rule
{
public class UserRules
{
ToEmail.DataAccess.UserDataAccess Uda = new ToEmail.DataAccess.UserDataAccess();
/// <summary>
/// 检测用户是否存在
/// </summary>
/// <param name="name">用户名</param>
/// <param name="pwd">密码</param>
/// <returns>bool</returns>
public bool CheckUser(string name, string pwd)
{
DataSet Uds = Uda.UserLogion(name, pwd);
if (Uds.Tables[0].Rows.Count > 0)
{
return true;
}
return false;
}
}
}
Controller部分:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ToEmailDemo02
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSubmit_Click(object sender, EventArgs e)
{
ToEmail.Rule.UserRules Urule = new ToEmail.Rule.UserRules();
if (Urule.CheckUser(txtName.Text.Trim(), txtPwd.Text.Trim()))
{
lblMsg .Text ="登入成功";
}
else
{
lblMsg.Text = "登入失败";
}
}
}
}
运行结果:
这个例子充分体现了MVC的三层架构,使用户界面逻辑与业务逻辑分离开来,不过相比之下,代码量增加了。
数据访问层:ToEmail.DataAccess连接数据库,只管对数据库操作,其他的什么也不管,把结果返回即可,返回DataSet。
规则层:ToEmail.Rule只做一件事儿,判断业务逻辑(判断行是否大于0,告诉界面这个用户是否能登入)检测用户是否存在,返回Bool值。
Controller部分:调用规则层ToEmail.Rule。
运行后,一级一级向下访问,最后访问到数据层。
层是分出来了,但这里如果不止是Name和Pwd两个参数,还想要添加几个,修改起来就很麻烦,欲知如何处理,请看下篇。