一.引言:
在之前就听说了三层,这段时间对三层有了些了解,三层就是将系统的界面,数据库,数据的处理进行分离,以便于程序开发人员对程序整体的把握和理解。
二.简介:
1.三层:表示层(UI,User Interface),业务逻辑层(BLL BusinessLogicLayer),数据访问层(DAL Data Access Layer)
(1)UI层:是用户看到的界面层;
(2)Bll层:是UI层和D层的桥梁,连接两层主要进行一些数据的处理操作,从D层获取数据传给UI层,进行一些逻辑判断;
(3 )DAL层:与数据库打交道,进行增删改查操作;
2.可以将三层用食堂买饭实例来理解一下:
学生去食堂买饭,首先食堂里有卖饭大姨,有厨师,有采购人员,还有菜市场用来采购食材
- UI层就表示卖饭大姨,卖饭大姨跟学生以及和厨师有联系,将厨师做的菜品传递给学生,学生来接收;
- Bll层表示厨师,厨师来和卖饭大姨以及采购人员联系,将采购人员购入的食材加工为食物传递给卖饭大姨;
- DAL层表示采购人员,厨师将需要的食材告诉采购人员,采购人员负责去菜市场采购进行一些食材的筛选;
- 然而菜市场就是数据库用来存放食材,与采购人员联系;
三.登陆代码示例:
数据库表:
代码:
UI层:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CaterBll;
using CaterModel;
namespace CaterUI
{
public partial class FormLogin : Form
{
public FormLogin()
{
InitializeComponent();
}
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnLogin_Click(object sender, EventArgs e)
{
//收集用户登陆信息
string name = txtName.Text;
string MPwd = txtPwd.Text;
//调用代码
string type;
ManagerInfoBll miBll = new ManagerInfoBll();
LoginState loginState = miBll.Login(name, MPwd, out type);
//set MPwd =Trim("MPwd");
//string type = "经理";
switch (loginState)
{
case LoginState.Ok:
FormMain main = new FormMain();
main.Tag = type;//将用户级别传递过去
main.Show();
//将当前窗体隐藏
this.Hide();
break;
case LoginState.NameError:
MessageBox.Show("用户名错误");
break;
case LoginState.PwdError:
MessageBox.Show("密码错误");
break;
}
}
Bll层:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CaterCommon;
using CaterDal;
using CaterModel;
namespace CaterBll
{
public partial class ManagerInfoBll
{
public LoginState Login(string name,string pwd,out string type)
{
//根据用户名进行对象的查询
ManagerInfo mi = miDal.GetByName(name);
if (mi == null)
{
return LoginState.NameError;
}
else
{
//用户名正确
if (mi.MPwd.Equals(pwd))
{
//密码正确
//登陆成功
type = mi.MType;
return LoginState.Ok;
}
else
{
//密码错误
return LoginState.PwdError;
}
}
}
}
}
DAL层:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CaterModel;
using System.Data;
using System.Data.SqlClient;
using CaterCommon;
namespace CaterDal
{
public partial class ManagerInfoDal
{
public ManagerInfo GetByName(string name)
{
//定义一个对象
ManagerInfo mi = null;
//构造语句
string sql = "select * from dbo_Manager_Info where MName =@name";
//为语句构造参数
SqlParameter p = new SqlParameter("@name", name);
//执行查询得到结果
DataTable dt = SqlHelper.GetDataTable(sql, p);
//判断是否根据用户查找到对象
if (dt.Rows.Count > 0)
{
//用户名是存在的
mi = new ManagerInfo()
{
MID = Convert.ToInt32(dt.Rows[0][0]),
//MName = name.ToString().Trim(),
MName = dt.Rows[0][1].ToString(),
MPwd = dt.Rows[0][2].ToString().Trim(),
MType = dt.Rows[0][3].ToString().Trim()
};
}
else
{
//用户名不存在
}
return mi;
}
}
}