三层架构与四大天王之前传

上篇文章我们介绍了一下三层架构的基础知识,这次就让我们来探寻一下他的运行机制吧。

1、实体层

(1)是什么

    实体类——实体类其实是存放数据的,我们在数据库读取的数据就是存放在实体层里面的(是辅助数据库的映射,可以理解为传递数据的载体)。实体类主要是作为数据管理和业务逻辑处理层面上存在的类别;
它们主要在分析阶段区分实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关。实体类对应数据库中一个表,实体类的每个属性对应表中相应的字段,使用实体类符合面向对象编程的思想,把一个表封装成一个类。

(2)有什么用

程序在运行时,每一层(UI—>BLL—>DAL)之间的数据传递(单向)是靠变量或实体作为参数来传递的,这样就构造了三层之间的联系,完成了功能的实现。但是对于大量的数据来说,用变量做参数有些复杂,因为参数量太多,容易搞混。比如:我要把员工信息传递到下层,信息包括:员工号、姓名、年龄、性别、工资....用变量做参数的话,那么我们的方法中的参数就会很多,极有可能在使用时,将参数匹配搞混。这时候,如果用实体做参数,就会很方便,不用考虑参数匹配的问题,用到实体中哪个属性拿来直接用就可以,很方便。。

因此,实体类有一下作用

1,实现面向对象思想中的"封装";

2,贯穿于三层,在三层之间传递数据;

3,提高了效率;

2、运行前提

程序要想运行,首先要将三层及Entity连接起来,也就是在项目中添加引用。

引用关系为:UI引用BLL和Entity;BLL引用DAL和Entity;DAL只引用Entity。

3、运行机制

4、运行实例

(1)登陆之UI层

主要是提供给用户界面,跟用户交互

登陆按钮的代码

[vb] view
plain
copy

  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. //实例化一个模型对象
  4. Login.Model.UserInfo user = new Login.Model.UserInfo();
  5. //讲参数传给该对象
  6. user.UserName=txtUserName.Text.Trim();
  7. user.Password=txtPassword.Text;
  8. //实例化B层
  9. Login.BLL.UserManager mgr = new Login.BLL.UserManager();
  10. //将该对象传给B层处理
  11. Login.Model.UserInfo User = mgr.UserLogin(user);
  12. //显示传回的信息
  13. MessageBox.Show  ("登录用户名:"+User.UserName );
  14. }

(2)登陆之BLL层

UserManager类

[vb] view
plain
copy

  1. public class UserManager
  2. {
  3. public Login.Model.UserInfo UserLogin(Login.Model.UserInfo user)
  4. {
  5. //调用D层
  6. Login.DAL.UserDAO udao = new Login.DAL.UserDAO();
  7. //让D层判断信息是否正确
  8. Login.Model.UserInfo User = udao.SelectUser(user);
  9. if (User == null)
  10. {
  11. //如果用户名错误,将提示用户
  12. throw new Exception("用户名不正确!");
  13. }
  14. else if (User.Flag==false)
  15. {
  16. throw new Exception("密码错误,登陆失败!");
  17. }
  18. else
  19. {
  20. //成功登陆,返回用户信息
  21. return User;
  22. }
  23. }
  24. }

(3)登陆之DAL层

DBUtil类

[vb] view
plain
copy

  1. class DBUtil
  2. {
  3. //连接数据库语句
  4. public static string ConnString = @"server=localhost;Database=Login;User=sa;Password=123456;";
  5. }

UserDAO类

[vb] view
plain
copy

  1. public class UserDAO
  2. {
  3. public Login.Model.UserInfo SelectUser(Login.Model.UserInfo user)
  4. {
  5. //连接数据库,验证信息
  6. using (SqlConnection conn=new SqlConnection(DBUtil.ConnString))
  7. {
  8. SqlCommand cmd = conn.CreateCommand();      //用于处理数据库
  9. //判断用户名是否存在
  10. cmd.CommandText = @"SELECT * FROM USERS WHERE [email protected]";
  11. //获得查询语言
  12. cmd.CommandType = CommandType.Text;
  13. //添加查询语言中的参数
  14. cmd.Parameters.Add(new SqlParameter("@UserName", user.UserName));
  15. //cmd.Parameters.Add(new SqlParameter("@Password", user.Password));
  16. conn.Open();
  17. //查询并返回结果
  18. SqlDataReader reader = cmd.ExecuteReader();
  19. //声明一个返回实例,如果用户名不存就返回空实例
  20. Login.Model.UserInfo User = null;
  21. while (reader.Read())
  22. {
  23. //如果用户名存在,就验证密码是否正确
  24. if (User==null)
  25. {
  26. User=new Login.Model.UserInfo();
  27. }
  28. //如果密码存在就返回用户信息
  29. if (user.Password ==reader.GetString(2))
  30. {
  31. User.Flag = true;          //用户密码正确的标志
  32. //传回用户信息,即实体的属性
  33. User.ID = reader.GetInt32(0);
  34. User.UserName = reader.GetString(1);
  35. User.Password = reader.GetString(2);
  36. //如果邮箱不为空,则取出
  37. if (!reader.IsDBNull(3))
  38. {
  39. User.Email = reader.GetString(3);
  40. }
  41. }
  42. else
  43. {
  44. User.Flag = false;       //用户密码错误的标志
  45. }
  46. }
  47. return User;       //传回实体
  48. }
  49. }
  50. }

(4)登陆之Model层

UserInfo类

[vb] view
plain
copy

  1. public class UserInfo
  2. {
  3. public int ID { get; set; }
  4. public string UserName { get; set; }
  5. public string Password { get; set; }
  6. public string Email { get; set; }
  7. public bool Flag;
  8. }

最后登陆成功

三层架构与四大天王之前传

时间: 2024-10-04 15:25:29

三层架构与四大天王之前传的相关文章

三层架构与四大天王之——查

上次我们说到了,如何利用三层架构去数据库中删除数据,这次我们就来谈谈如何去数据库中查找数据,其实在上篇文章中也涉及到了查找,但那是将整个表中的记录都显示出来,而我们这次来查找我们所需要的某一条记录. 1.UI层 首先是界面,还记得我们第一次添加的"王菲"的那条记录吗,今天我们就将它查出来 private void button1_Click(object sender, EventArgs e) { //实例化一个模型对象,用来向D层传递信息 Login.Model.UserInfo

三层架构与四大天王之——增

1.上集回顾   上篇文章我们介绍了三层架构的运行机制,其中包含了对实体类的理解,而后又以简单的登录为例展示了一下,接下来就让我们看看三层架构与"四大天王"的交互. 所谓的四大天王也就是对数据的四大操作--增.删.改.查,这四个功能是最基本,也是最主要的.那么,下面我们就来展示一下如何利用三层向数据库中增加数据.    2.增        (1)UI层         首先是由用户向U层输入要添加的数据                                   以下是确认添

三层架构与四大天王之——改

今天让我们一起来认识一下"四大天王"中的最后一个--修改数据库中的信息.为什么要把修改放在查询之后呢?这是因为要想修改首先就得将信息查出来,所以查询是修改的前提. 1.UI层 首先查询要修改的记录,如"王菲"(代码见上篇文章) 然后将密码"123456"改为"5201314" 确认修改的代码如下 private void button2_Click(object sender, EventArgs e) { Login.Mod

三层架构与四大天王之——删

上篇我们介绍了,数据库四大功能之一--增,这次我们就说说如何利用三层设计来对数据实现删除记录的功能. 1.刷新       要想删除数据库中的记录,首先我们应该将表中的数据显示出来,所以此功能的实现方法如下       1.1UI层                  其代码 //刷新按钮,刷新Users表的信息 private void button1_Click(object sender, EventArgs e) { //实例化一个用户集,用来接收传回来的信息 ArrayList User

三层架构,四大天王——删

第一部分我们介绍,间数据库的四个功能--增加.这一次,我们将讨论除记录的功能. 1.刷新       要想删除数据库中的记录,首先我们应该将表中的数据显示出来,所以此功能的实现方法例如以下       1.1UI层                  其代码 //刷新button,刷新Users表的信息 private void button1_Click(object sender, EventArgs e) { //实例化一个用户集.用来接收传回来的信息 ArrayList UsersList

传参数与传实体、返回实体与返表——三层架构登录实例

在用三层做窗体登录实例的时候,暂时没有加设计模式和反射配置,与以前做的<机房收费系统>相比,除了引入分层的理念外,最大的改观就是数据的传递由传参升级成了传实体. 先看下用传参数方式的登录按钮click事件 通过参数传递乍看起来清晰易读,但是这样的程序耦合度太高,会为以后的数据变动和维护埋下隐患.例如,需要传递的数据增加了一个ID,user=mgr.SelectUserLogin(userName,password)行代码就要修改一次,如果再增加一个Level呢?难道需求每变动一次,就要改动一次

传參数与传实体、返回实体与返表——三层架构登录实例

用三层做窗口登录实例,与曾经做的<机房收费系统>相比,除了引入分层的理念外,最大的改观就是数据的传递由传參升级成了传实体,而查询数据库的返回结果也有了返回实体与返表的选择 传參数与传实体 窗口登录实例的的UI层是接收用户操作的最外层,数据经它转交给BLL层,如今先看下我们用以往传參数的方式,来编写的登录buttonclick事件 通过參数传递乍看起来清晰易读,可是这种程序耦合度太高,会为以后的数据变动和维护埋下隐患.比如,须要传递的数据添加了一个ID,user=mgr.SelectUserLo

C#三层架构

最近新学的,C#中得三层架构                                                                                ----2016-10-23 表示层 业务逻辑层(BLL) 数据访问层(DAL) 关联:产生依赖关系 描述:三层体系结构就是在客户端和数据库之间加一个中间层,通常情况下客户端不能直接和数据库进行交互,而是通过中间层和数据层进行交互的. [表示层] 主要负责完成用户和系统的交互. 它接收用户输入的信息,并把上级传

三层架构1

一.三层框架 表现层:也叫视图层,用html.css.js.jquery 业务逻辑层:也叫控制层,包含业务逻辑的实现部分 数据管理层:与数据库直接交互的部分 二.组建三层框架(现有实例) 1.数据管理层 A.引入Model类 创建项目之后在项目的同级目录上建立Model的目录,相应的在保存项目的硬盘上也建立Model的目录.然后把Model.Base复制到硬盘上也建立的Model目录下,并在项目的Model下引入硬盘Model.Base线面现有的Model.Base.csproj模块. B.在项