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";
}
}
- 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
- 点赞
- 收藏
- 关注作者
评论(0)