三层的学习很早就完成了 ,但是不知道该写点什么,但当敲了机房收费系统后,才知道自己当时为什么不知道写点什么.
对于什么是三层,为什么要使用三层,相信大家都有了不同程度的认识,在这里我就不累述了。其实也不是所有的程序都适合使用三层,一些简单的程序就可以不用三层。下面我就用三层来实现登录的小例子。例子虽然小主要是为了说明简单三层。
学习三层的时候在网上查了一些资料,然后敲了例子,关于一个用户登录的.
首先看看我画的关于三层的类图与、包图和序图:
类图:
包图:
时序图:
下面展示一下代码:
Model:
namespace Model
{
public class User //实体类user
{
private string username; //user的用户名的属性
public string Username
{
get { return username; }
set { username = value; }
}
private string password; //user类用户名密码的属性
public string Password
{
get { return password; }
set { password = value; }
}
}
}
U层:
using Model;
using BLL;
namespace UI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnLogin_Click(object sender, EventArgs e)
{
//创建一个逻辑变量,初始值为false,用来接收BLogin的值
bool result = false;
if (txtUserName.Text == "")
{
MessageBox.Show("用户名不能为空!");
txtUserName.Focus();
return;
}
if (txtPassWord.Text == "") //如果密码为空,则提示
{
MessageBox.Show("密码不能为空!");
txtPassWord.Focus();
return;
}
User euser = new User(); //实例化一个user
euser.Username = txtUserName.Text.Trim(); //为username赋值
euser.Password = txtPassWord.Text.Trim(); //为password赋值
LoginBLL blogin = new LoginBLL(); //实例化LoginBLL
result = blogin.BLogin(euser); //以euser为参数的实例化对象的值传递给result
if (result == true)
{
MessageBox.Show("登陆成功!");
}
else
{
MessageBox.Show("登陆失败!");
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
B层:
using DAL;
using Model;
namespace BLL
{
public class LoginBLL
{
public bool BLogin(User QueryUser) //接收U层的euser参数
{
UserDAL duser = new UserDAL();//实例化一个DAL层的UserDAL
User userlogin = new User();
//实例化一个userlogin实体,他其实就是U层中对象euser承载的内容一样
userlogin = duser.DLogin(QueryUser);//将从D层返回的UserloginDAL相比较
if (userlogin.Password.Trim() == QueryUser.Password.Trim())
//比较D层传回用户密码和userlogin的密码是否一致
{
return true; //如果相等,BLogin返回true
}
else
{
return false; //如果不等,BLogin返回false
}
}
}
}
D层
using Model;
using System.Data;
using System.Data.SqlClient;
namespace DAL
{
//连接数据库
public class UserDAL
{
//设置连接字符串
static string conString = "data source=yingjie-PC;database=Charge;User ID=sa;password=123456";
SqlConnection cnn = new System.Data.SqlClient.SqlConnection(conString);
public User DLogin(User QueryUser)
{ //查询数据库
string sqlString = "select * from T_User where UserName='" + QueryUser.Username + "'";
User userloginDAL = new User(); //创建用户登录对象,用来承载从数据库查询出的用户信息
SqlCommand cmd=new SqlCommand (sqlString ); //创建SqlCommand类的对象cmd
cmd.Connection = cnn; //设置数据命令使用的连接
cnn.Open() ; //打开连接
SqlDataReader read; //定义SqlDataReader对象read
//执行sqlcommand的executereader方法并将结果赋给read对象
read = cmd.ExecuteReader();
read.Read(); //读取信息
//将信息的第二个字段转换成string类型,并复制给userLoginDAL的用户名属性
userloginDAL.Username = read[1].ToString();
//将信息的第4个字段转换成string类型,并复制给userLoginDAL的密码属性
userloginDAL.Password = read[3].ToString();
return userloginDAL; //返回useloginDAL
}
}
}
小例子是完成了,其中不乏缺陷.只是将三层简化,更容易理解.我想说一些实体类,实体类在三层中有着重要的地位,它就如同人类的血液一样在各层之间游走.