【三层架构】登陆实例

前言  


    对于登陆实例,我们可以将它看一个业务,即登陆业务。UI层负责界面设计显示和采集用户的操作。BL层通过获取UI传来的操作指令,对数据业务逻辑进行处理,处理完成后,返回必要。DA层主要负责数据库的访问。代码如下:


    UIL代码展示:

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;

namespace LoginUI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void btnLogin_Click(object sender, EventArgs e)
        {
            string userName = txtUserName.Text.Trim();
            string password = txtPassword.Text;
            Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
            Login.Model.UserInfo user = mgr.UserLogin(userName, password);

            MessageBox.Show("当前登录用户:" + user.UserName+"\r\n"+"当前登录用户的密码:" + password,"登录");
        }
    }
}

    BLL代码展示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Login.BLL
{
    public class LoginManager
    {
        public Login.Model.UserInfo UserLogin(string userName,string password)
        {
            

            DAL.UserDAO uDao = new Login.DAL.UserDAO();
            Login.Model.UserInfo user = uDao.SelectUser(userName, password);
            
            if (user != null)  //login successfully
            {
                Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();
                sDao.UpdateScore(userName,10);
                return user;
            }
            else
            {
                throw new Exception("登录失败。");

            }

        }
    }
}
 

    DAL代码展示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;


namespace Login.DAL
{
    public class UserDAO
    {
        public Login.Model.UserInfo SelectUser(string userName, string password)
        {
            using (SqlConnection conn = new SqlConnection(@"Server=DESKTOP-LTBMQSK;Database=Login;User ID=sa;Password=jujianfei")) 
            {
                {
                    SqlCommand cmd = conn.CreateCommand();
                    cmd.CommandText = @"SELECT ID,UserName,Password,Email from Users where UserName=@UserName AND Password=@Password";
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                    cmd.Parameters.Add(new SqlParameter("@Password", password));

                    conn.Open();
                    SqlDataReader reader = cmd.ExecuteReader();

                    Login.Model.UserInfo user = null;
                    while (reader.Read())
                    {
                        if (user == null)
                        {
                            user = new Login.Model.UserInfo();
                        }
                        user.ID = reader.GetInt32(0);
                        user.UserName = reader.GetString(1);
                        user.Password = reader.GetString(2);//not suggestion
                        if (!reader.IsDBNull(3))
                        {
                            user.Email = reader.GetString(3);
                        }
                    }
                    return user;
                }
            }
        }
    }
}

   实体层代码展示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Login.Model
{
   public class UserInfo
    {
       public int ID { get; set; }
       public string UserName{get;set;}
       public string Password{get;set;}
       public string Email{get;set;}
    }
}


总结


           实体层是封装数据的,保证数据在三个层次之间顺畅流转,独立于其他三个层次,不引用任何一层,而其他三层都需要引用实体,另外三层之间的引用关系是:UIL→BLL→DAL。实体层并不是三层中的一员,简单来看,这就是一个普通的类,不要混淆了。下面展示一幅他们之间的关系图:


【三层架构】登陆实例_第1张图片






你可能感兴趣的:(【三层架构】登陆实例)