c#三层登录-三层架构
前言:
在学习完设计模式之前,三层的概念一致停留在脑海了。没有去实现出来,也不知道如何去实现。只是知道三层分为:UI,BLL DAL 这三个层还有一个可有可无的MODl层(实体层)。
三层分别是那三层?
 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。
现实的例子:
 点餐(民以食为天,所以以点餐为例)
 
 服务员:相当于U层(传递数据)
 厨师:相当于B层(实现业务)
 采购员:相当于D层(采集数据)
小结:客户不用关心是哪个厨师做的,也不用关心是谁采购的食材。只需要关心自己的需求实现了没有。
三层代码:
 架构

 引用关系:
 
 UI:引用BLL层和Entity层
 BLL:引用DAL层和Entity层
 DAL:引用Entity层
 Entity 不引用任何层
代码:
 DAL
 这个类用于填写数据的密码和服务器地址,起到连接作用。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyBookShop.DAL
{
    /// <summary>
    /// //数据访问层,用于保存 链接服务器的sql语句
    /// </summary>
    class DbUtil
    {
        public static string connString = @"Server=.;Database=charge_sys;User ID=sa; Password=123456";
        
    }
}
这个类用于连接之后,进行具体查询作用。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MyBookShop.Models;
using System.Data.SqlClient;
using System.Data;
namespace MyBookShop.DAL
{
    public class UserDAL
    {
        根据 ui 选择返回一个user
        public UserModel SelectUser(string userName, string userPwd)
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.connString))
            {
                //创建一个命令对象,并添加命令
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = @"select UserName,PWD from User_Info where UserName=@UserName and PWD=@UserPwd ";
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@UserName", userName);
                cmd.Parameters.AddWithValue("@UserPwd", userPwd);
                conn.Open();//打开数据链接
                SqlDataReader reader = cmd.ExecuteReader();
                UserModel user = null; //用于保存读取的数据
                while (reader.Read()) //开始读取数据
                {
                    if (user == null) //如果没有,则重新生成一个
                    {
                        user = new UserModel();
                    }
                    // user.Id = reader.GetInt32(0);
                    user.UserName = reader.GetString(0);
                    user.UserPwd = reader.GetString(1);
                }
                return user;
            }
        }
    }
}
BLL(业务逻辑层)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MyBookShop.Models;
using MyBookShop.DAL;
namespace MyBookShop.BLL
{
    /// <summary>
    /// //业务逻辑层
    /// </summary>
    public class UserBLL
    {
        public UserModel UserLogin(string userName, string userPwd)
        {
            UserDAL userDal = new UserDAL();//实例化一个数据访问层
            UserModel user = userDal.SelectUser(userName, userPwd);通过ui中填写的内容 返回来相应的数据
            if (user != null)
            {
                return user;//如果数据库中有数据,则返回一个实体类
            }
            else
            {
                throw new Exception("登陆失败");
            }
        }
    }
}
Entity(实体层)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System;
using System.Collections.Generic;
using System.Text;
namespace MyBookShop.Models
{
    /// <summary>
    /// 实体类,用于保存用户信息
    /// </summary>
    public class UserModel
    {
        public int Id { get; set; }
        public string UserName { get; set; }
        public string UserPwd { get; set; }
    }
}
UI
 
 登录按钮
  try
            {
                取出用户界面的数据
                string userName = txtUserName.Text.Trim();
                string userPwd = txtUserPwd.Text;
                UserBLL userBll = new UserBLL();//实例化一个业务逻辑层BLL
                UserModel userModel = userBll.UserLogin(userName, userPwd);//使用用户界面数据,进行查找BLL数据
                MessageBox.Show("登陆用户:" + userModel.UserName);
            }
            catch (Exception ex) //如果登陆有异常 则登陆失败
            {
                MessageBox.Show(ex.Message);
            }
效果:
 
    欢迎访问csdn的博客:
https://blog.csdn.net/kangshihang1998?spm=1010.2135.3001.5343
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号