三层架构

您所在的位置:网站首页 简述三层架构设计编写思路 三层架构

三层架构

2024-07-11 00:14| 来源: 网络整理| 查看: 265

三层登录 前言什么是三层架构①、表示层(UI)②、业务逻辑层(BLL)③、数据访问层(DAL) 为什么要使用三层架构 正文三层登录实例图代码UI层BLL层实体层(Moudel)DAL层

前言 什么是三层架构

把各个功能模块,很为表示层(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 语句并返回受影响的行数。 } } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3