c#三层登录-三层架构

举报
ksh1998 发表于 2021/12/26 00:00:15 2021/12/26
【摘要】 前言: 在学习完设计模式之前,三层的概念一致停留在脑海了。没有去实现出来,也不知道如何去实现。只是知道三层分为:UI,BLL DAL 这三个层还有一个可有可无的MODl层(实体层)。 三层分别是那三层...

前言:

在学习完设计模式之前,三层的概念一致停留在脑海了。没有去实现出来,也不知道如何去实现。只是知道三层分为: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";
        
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

这个类用于连接之后,进行具体查询作用。

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;
            }
        }
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

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("登陆失败");
            }
        }
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

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; }
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

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);
            }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

效果:
在这里插入图片描述

文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。

原文链接:kangshihang.blog.csdn.net/article/details/103295192

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。