三层架构---三层登录

╰+攻爆jí腚メ 2022-01-22 02:05 723阅读 0赞
  • 什么是三层?

    三层又分为物理划分和逻辑划分












物理划分 逻辑划分
显示层/业务层/数据层 UI,BLL,DAL
  • 每层的功能是什么?

UI层(表现层):

主要用于存放与用户交互的展示页面,原则: 用户至上,兼顾简洁

注意: 在一般使用中,UI层需要添加一个对BLL层的对象的引用,使得UI层和BLL层之间建立连接。

BLL层(业务逻辑层):

  1. 主要用于存放针对具体问题对数据进行逻辑处理的代码
  2. DAL中获取数据,以供UI显示, UI中获取用户指令和数据,执行业务逻辑

DAL(数据访问层):

主要用于存放对原始数据进行操作的代码

DAL只提供基本的数据访问,不包含任何业务相关的逻辑处理

  • 三层之间的关系

在三层结构中,各层之间相互依赖,表示层依赖于业务逻辑层,业务逻辑层依赖于数据访问层

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMwNjMxMDYz_size_16_color_FFFFFF_t_70

#

  • 为什么要使用三层,它有什么好处?

三层中耦合度很低,无论哪层需要发生改变,仅仅需要改变该层,不需要更改整个系统

层次清晰,每层之间耦合度低。

  • 举个例子:

服务员:仅仅用来接待客人

厨师:仅仅负责客人点的菜

采购员:按客人点菜的要求采购食材

他们自己负责自己的工作,服务员只需要知道客人的需求,不需要了解厨师是如何做菜的,也不需要了解采购员

厨师不需要了解接待了哪个客户,只需要知道做什么菜

采购员也不需要知道具体的客户也不需要知道怎么做菜,只需要知道需要买的食材。

具体过程:

顾客直接和服务员打交道,顾客和服务员(UI层)说:我要一个炒茄子,而服务员不负责炒茄子,她就把请求往上递交,

传递给厨师(BLL层),厨师须要茄子,就把请求往上递交,传递给採购员(DAL层),

做好炒茄子后,又传回给服务员,服务员把茄子呈现给顾客。

20190604201217281.png

不知道大家有没有在视频中发现一个事情就是: 虽然我们学习的是三层架构,但是莫名奇妙的多出了一个 Model 模板

其实这个模板起到的“上窜下蹦”的作用,贯穿于三层,在三层之间传递参数

-————三层登陆分析:

学习过视频,然后跟着老师敲了一个三层的登陆窗体

1.先来看一下UI层

  1. public void button1_Click(object sender, EventArgs e)
  2. {
  3. //用来获取登陆界面的信息
  4. string userName = txtUserName.Text.Trim();
  5. string password = txtPassword.Text;//密码就不需要添加trim 因为密码里可能会有空格
  6. //需要和逻辑B层建立连接
  7. LoginManager mgr = new LoginManager();//相当于构造了一个实例,实例化
  8. //把信息传递给建立的模型中
  9. UserInfo user = mgr.UserLogin(userName, password);
  10. //uI层返回业务层传递得数据给用户
  11. MessageBox.Show("登录用户:" + user.UserName);
  12. }

UI层:

在我们使用MessageBox.Show方法的时候需要在命名空间中 加载:

using System.Windows.Forms;

如果这个语句报错,那么我们需要在项目引用中加入一个插件:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMwNjMxMDYz_size_16_color_FFFFFF_t_70 1

2.BLL层

  1. public class LoginManager
  2. {
  3. public LoginModel.UserInfo UserLogin(string userName, string password)
  4. {
  5. //实例化D层对象,传输数据
  6. UserDAO uDao = new UserDAO();
  7. //通过user表去查询是否可以登陆成功,是否有用户信息
  8. LoginModel.UserInfo user=uDao.SelectUser(userName, password);
  9. //如果用户信息不为空,那么就需要在ScoreDAO表中更新数据
  10. if (user != null)// login successfully;
  11. {
  12. //实例化一个sDao的实例
  13. LoginDAL.ScoreDAO sDao = new LoginDAL.ScoreDAO();
  14. //通过sDao类的UpdateScore函数来实现更新的操作
  15. sDao.UpdateScore(userName, 10);
  16. return user;
  17. }
  18. else
  19. {
  20. throw new Exception("登陆失败");//作用是抛出错误,用这个抛出错误的原因让使用者知道为什么
  21. }
  22. }
  23. }

具体代码的含义已经在注释中有写。

throw new Exception(“登陆失败”),当我们输入的用户名或者密码不符合要求的时候就会跳到这里,表示出现错误

当然我们也可以用 Messagebox.show(“登陆失败”) 来代替。

3.DAL层

  1. using System.Data.SqlClient;
  2. /*
  3. 表示在你的代码中引入微软发布的sqlserver数据库的ado.net程序集,引入后,
  4. 你就可以使用SqlConnection、SqlCommand等数据库对象来访问sqlserver数据库。
  5. */
  6. namespace LoginDAL
  7. {//登陆积分
  8. public class ScoreDAO
  9. {
  10. public void UpdateScore(string userName, int value)
  11. {
  12. //SqlConnection 用来连接数据库
  13. using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
  14. {
  15. //实例化一个cmd类对象来对数据库进行存储操作
  16. SqlCommand cmd = conn.CreateCommand();
  17. cmd.CommandText = @"INSERT INTO SCORES(UserName,Score) Values(@UserName,@Score)";
  18. //cmd.Parameters.Add(new SqlParameter(@"ID", ID));
  19. //将 userName 传递给 userName
  20. cmd.Parameters.Add(new SqlParameter(@"userName", userName));
  21. //将value传递给Score;
  22. cmd.Parameters.Add(new SqlParameter(@"Score", value));
  23. conn.Open();
  24. //开始执行 cmd 开始插入
  25. cmd.ExecuteNonQuery();
  26. }
  27. }
  28. }
  29. public class UserDAO
  30. {
  31. public LoginModel.UserInfo SelectUser(string userName, string password)
  32. {
  33. using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
  34. {
  35. SqlCommand cmd = conn.CreateCommand();
  36. cmd.CommandText = @"SELECT ID,UserName,Password,Email FROM USERS WHERE UserName=@UserName
  37. AND Password=@Password";
  38. cmd.CommandType = CommandType.Text;
  39. cmd.Parameters.Add(new SqlParameter("@UserName",userName));
  40. cmd.Parameters.Add(new SqlParameter("@Password", password));
  41. conn.Open();
  42. SqlDataReader reader = cmd.ExecuteReader();
  43. LoginModel.UserInfo user = null;
  44. while (reader.Read())
  45. {
  46. if (user == null)
  47. {
  48. user = new LoginModel.UserInfo();
  49. }
  50. user.ID = reader.GetInt32(0);
  51. user.UserName = reader.GetString(1);
  52. user.Password = reader.GetString(2);
  53. if (!reader.IsDBNull(3))
  54. {
  55. user.Email = reader.GetString(3);
  56. }
  57. }
  58. return user;
  59. }
  60. }
  61. }

知识点:

  • 1.C#中写sql 语句前为什么要加一个@ 符号

sql语句 前面加@可以防止换行后C#报错。@后面不管换了多少行,都表示是一个字符串。

  • 2.using System.Data.SqlClient; //这个语句的作用是什么?

/*

表示在你的代码中引入微软发布的sqlserver数据库的ado.net程序集,引入后,

你就可以使用SqlConnection、SqlCommand等数据库对象来访问sqlserver数据库。

*/

    1. using()的作用:

在using ()中建的对象,会在{ }结束的时候自动关闭和释放,不需要你手动进行。

这样你不用每次都要去调用conn.Close(),或者conn.Dispose()了,这样能减少人为引入Bug的机会。相当于定义了一个范围,当代码执行完毕就会跳出大括号,而跳出大括号之后就等于出了using的这个区域,

4.模板Model

  1. namespace LoginModel
  2. {
  3. public class UserInfo
  4. {
  5. //一系列属性
  6. public int ID { get; set; }
  7. public string UserName { get; set; }
  8. public string Password { get; set; }
  9. public string Email { get; set; }
  10. }
  11. }

用来接受参数,并且传参。

发表评论

表情:
评论列表 (有 0 条评论,723人围观)

还没有评论,来说两句吧...

相关阅读

    相关 架构

    三层架构,大家都熟悉得不得了。我现在也能张嘴就来,轻易就可以说出"三层架构"这4个汉字。可是,我真正理解了吗?层是个什么东西,分层架构好处在哪里? 20年前,在我刚出来打工的

    相关 架构

           三层架构就是将整个业务应用划分为:表现层(UI,UserInterface)、业务逻辑层(BLL,Business Logic Layer)、数据访问层(DAL,

    相关 实战架构

    实战剖析三层架构1 引言:本文不是从理论的角度来探讨三层架构,而是用一个示例来介绍如何建设一个三层架构的项目,并说明项目中各个文件所处的层次与作用。写本文的目的,不是为了说

    相关 架构

             一开始学习三层,是用C\来敲的,当时照着视频的讲解敲完了,敲完以后,感觉自己了解了一点,但是一换到VB.NET,又完全不知道该怎么敲,纠结了好久,现在觉得,是

    相关 架构理解

           三层架构是将整个业务分成:表示层,业务逻辑层,数据访问层,已达到“高内聚,低耦合”的思想;当一个软件系统较大时,采用分层的思想,可以降低复杂度。 【划分】

    相关 架构——JSP

    三层架构——基于java的web开发   三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interf