三层架构——三层登录

简介: 三层架构——三层登录

三层登录

前言

什么是三层架构

把各个功能模块,很为表示层(UI)、业务逻辑层(BLL)、和数据访问层(DAL)

各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体。

①、表示层(UI)

与用户交互的界面,用于接收用户输入的数据和返回用户需要的数据

②、业务逻辑层(BLL)

负责连接UI层和DAL层可以起到一个桥梁的作用,处理业务逻辑,进行逻辑判断、计算等等。

③、数据访问层(DAL)

与数据库打交道,主要进行对数据的增、删、改、查

为什么要使用三层架构

使用三层架构的目的就是:解耦,降低耦合度

每一层之间分工明确,任何一层发生变化不会影响到另一层

举一个例子:

服务员(UI层)请假——另找服务员,厨师(BLL层)辞职——另找一个厨师,采购员(DAL层)辞职——另找采购员

优点

1.结构清晰,每一层之间耦合度低

2.适应变化能力强,

3.可维护,可扩展,可复用

正文

三层登录实例





代码

UI层
private void btnLogin_Click(object sender, EventArgs e)
        {
            string userName = txtUserName.Text.Trim();                                 //将txtUserName文本框中去除空格的内容赋值个userName变量
            string password = txtPassWord.Text;                                        //将txtPassWord文本内容赋值给password变量
            string msg;                                                                //声明字符串变量msg
            msg = "";                                                                  //变量msg为空
            Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();                 //实例化BLL层
            Login.Model.UserInfo user = mgr.UserLogin(userName, password, out msg);    //mgr调用UserLogin方法获取用户名和密码对user赋值并跳转到BLL
            MessageBox.Show(msg);
        }
BLL层
public  class LoginManager
    {
        public Login.Model.UserInfo UserLogin(string userName, string password, out string msg)//创建一个返回值为Login.Model.UserInfo类型参数为userName,password,msg的UserLogin方法
        {
            //throw new NotImplementedException();
            Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();                           //实例化DAL层的UserDAO
           Login.Model .UserInfo user= uDao.SelectUser(userName, password);             //跳转到DAL层,把当前用的userName,password传给实体层user对象
            if (user != null)//login successfully.                                      //如果user为空
            {
                //Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();                     //实例化DAL层的ScoreDAO               
                //sDao.UpdateScore(userName, 10);                                         //调用sDao的UpdateScore方法添加userName和10个积分
                msg = "登录成功";                                                       //给msg赋值 登陆成功
            }
            else                                                                        //否则
            {
                msg = "登录失败";                                                       //给msg赋值 登陆失败
            }
            return user;                                                                //返回 user
        }
    }
实体层(Moudel)
public   class UserInfo
    {
        public int ID { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string Email { get; set; }
    }
DAL层
public  class DbUtil
    {
        public static string Connstring =@"Server=wangwei;Database=Login;User ID=sa;Password=wangwei";//数据库链接
    }
 public  class UserDAO
    {
        public Login.Model.UserInfo  SelectUser(string userName,string password)
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.Connstring)) //使用using,完成之后自动关闭SqlConnection。
            //通过SqlConnection连接具体数据库
            {
                SqlCommand cmd = conn.CreateCommand();                        //创建一个数据库的操作对象cmd
                cmd.CommandText = @"SELECT ID,UserName ,Password,Email
                                    FROM USERS WHERE UserName=@UserName AND Password=@Password";                                  //获取需要执行的sql语句
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));      //设置参数用户名
                cmd.Parameters.Add(new SqlParameter("@Password", password));      //设置参数密码
                cmd.CommandType = CommandType.Text;                                
                conn.Open();                                                      //打开数据库连接
                SqlDataReader reader = cmd.ExecuteReader();                       //将 CommandText 发送到 Connection,并生成 SqlDataReader,并且进行逐条读取
                Login.Model.UserInfo user = null;                               //构造user默认值使null          
                while (reader.Read())                                        //循环读取数据,当没有数据推出循环
                {
                    if (user == null)                                       //如果user=null
                    {
                        user = new Login.Model.UserInfo();                     //实例化实体层
                    }
                    user.ID = reader.GetInt32(0);                             //将返回结果集第一个字段并且为整型赋值给user的ID属性
                    user.UserName = reader.GetString(1);                      //读取用户名并赋值给user的UserName属性
                    user.Password = reader.GetString(2);
                    if (!reader.IsDBNull(3))                                   //是否为空
                    {
                        user.Email = reader.GetString(3);                      //
                    }
                }
                return user;                                                    //返回 user
            }
        }
    }
 public  class ScoreDAO
    {
        public void UpdateScore(string userName,int value)                          //创建UpdateScore方法参数为userName和value
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.Connstring))       //创建数据库连接对象
            {       
                SqlCommand cmd = conn.CreateCommand();                              //创建数据库的操纵对象cmd            
                cmd.CommandText = @"INSERT INTO SCORES (UserName,Score)Values(@UserName,@Score)";   //将需要执行的sql语句赋值个cmd
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));         //获取userName
                cmd.Parameters.Add(new SqlParameter("@Score", value));               //获取value
                conn.Open();                                                         //数据库连接打开、
                cmd.ExecuteNonQuery();                                               //对连接执行 Transact-SQL 语句并返回受影响的行数。
            }
        }
    }
目录
相关文章
|
负载均衡 安全 API
SDN网络架构分为哪三层
SDN软件定义网络是一种创新的网络架构,旨在提供更灵活、可编程和智能的网络管理。SDN的设计理念是通过将网络控制平面和数据平面分离,实现对网络行为的集中控制和编程。
|
存储 安全 Ubuntu
飞书 + Lua 实现企业级组织架构登录认证
飞书是字节跳动旗下一款企业级协同办公软件,本文将介绍如何基于飞书开放平台的身份验证能力,使用 Lua 实现企业级组织架构的登录认证网关。
1049 0
飞书 + Lua 实现企业级组织架构登录认证
|
Web App开发 监控 应用服务中间件
全新架构:日志服务 SLS 自研免登录方案发布
全新架构!日志服务 SLS 自研免登录方案发布
88048 118
|
安全 Java 数据库
SpringSecurity+JWT前后端分离架构登录认证
在SpringSecurity实现前后端分离登录token认证详解_springsecurity前后端分离登录认证-CSDN博客基础上进行重构,实现前后端分离架构登录认证,基本思想相同,借鉴开源Gitee代码进行改造,具有更好的代码规范。
630 1
|
C#
C# 三层级架构问题之 能加载文件或程序集或它的某一个依赖项。系统找不到指定的文件
C# 三层级架构问题之 能加载文件或程序集或它的某一个依赖项。系统找不到指定的文件
343 0
xml的Spring三层项目架构
需求:使用三层架构开发,将用户信息导入到数据库中 目标:初步熟悉三层架构开发 核心操作:开发两套项目,对比Spring接管下的三层项目构建和传统三层项目构建的区别 注意:本例中的数据访问层,先不连接数据库,只是进行简单数据模拟
|
存储 缓存 移动开发
im 应用多点登录和消息漫游架构
im 应用多点登录和消息漫游架构
im 应用多点登录和消息漫游架构
|
存储 SQL 设计模式
【架构设计 领域驱动开发 一】三层VSDDD
【架构设计 领域驱动开发 一】三层VSDDD
325 0
|
前端开发 Java 数据库连接
MVC模式和三层架构-登录注册增删改查案例-(详细案例)
MVC模式和三层架构-登录注册增删改查案例-(详细案例)
MVC模式和三层架构-登录注册增删改查案例-(详细案例)
|
JSON 缓存 安全
实战!Spring Boot Security+JWT前后端分离架构登录认证!
实战!Spring Boot Security+JWT前后端分离架构登录认证!