C#三层架构

一.引言:

在之前就听说了三层,这段时间对三层有了些了解,三层就是将系统的界面,数据库,数据的处理进行分离,以便于程序开发人员对程序整体的把握和理解。

二.简介:

C#三层架构_第1张图片

1.三层:表示层(UI,User Interface),业务逻辑层(BLL BusinessLogicLayer),数据访问层(DAL Data Access Layer)

(1)UI层:是用户看到的界面层;

(2)Bll层:是UI层和D层的桥梁,连接两层主要进行一些数据的处理操作,从D层获取数据传给UI层,进行一些逻辑判断;

(3 )DAL层:与数据库打交道,进行增删改查操作;

2.可以将三层用食堂买饭实例来理解一下:

学生去食堂买饭,首先食堂里有卖饭大姨,有厨师,有采购人员,还有菜市场用来采购食材

  • UI层就表示卖饭大姨,卖饭大姨跟学生以及和厨师有联系,将厨师做的菜品传递给学生,学生来接收;
  • Bll层表示厨师,厨师来和卖饭大姨以及采购人员联系,将采购人员购入的食材加工为食物传递给卖饭大姨;
  • DAL层表示采购人员,厨师将需要的食材告诉采购人员,采购人员负责去菜市场采购进行一些食材的筛选;
  • 然而菜市场就是数据库用来存放食材,与采购人员联系;

三.登陆代码示例:

数据库表:

C#三层架构_第2张图片

代码:

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;


        }


    }
}​

 

 

 

 

 

 

你可能感兴趣的:(C#)