实践是检验真理的唯一标准。以下我们使用三层架构实践一个简单的“登录”业务。学以致用,来亲身感受一下三层架构的呼吸。

以上是启动界面,属于U层,它是Winform形式的。还有web方式的。用户在此输入username与password后,系统验证password是否正确。

注意,为了简单易行,要求输入的username在数据库中的User表中存在,否则就会报错。下面是总体的代码结构。

接下来看一看详细每一层中的代码:

实体层:

<span style="font-family:SimSun;font-size:18px;"> public class User{private string userName = string.Empty;//string.Empty就相当于""。一般用于字符串的初始化private string pwd = string.Empty;public string UserName { get; set; }public string Pwd { get; set; }}</span>

UI:

<span style="font-family:SimSun;font-size:18px;"> private void btnOK_Click(object sender, EventArgs e)//点击“确定”button,開始验证用户信息{//声明一个bool类型的变量用来接收登录状态,登录成功/失败bool result = false;//检查username与password是否为空if (txtUserName .Text ==""){MessageBox.Show ("username不能为空!");txtUserName.Focus();return;}if (txtPassword .Text ==""){MessageBox.Show("password不能为空!

"); txtPassword.Focus(); return; } //声明一个用户对象,将用户输入的username和password赋于这个用户对象 User euser = new User(); euser.UserName = txtUserName.Text.Trim(); euser.Pwd = txtPassword.Text; //訪问B层 LoginServer blogin = new LoginServer(); result = blogin.BLogin(euser);//B层验证password后,返回一个布尔值。传到此处 if (result ==true )//假设返回true。则登录成功 { MessageBox.Show("登录成功!"); } else //返回false,password输入错误,登录失败 { MessageBox.Show("登录失败!"); } } private void btnCancel_Click(object sender, EventArgs e)//点击“取消button”。关闭窗口 { this.Close(); }</span>

BLL:

<span style="font-family:SimSun;font-size:18px;">   public class LoginServer //验证用户password是否正确{public bool BLogin(User User){UserDAL duser = new UserDAL();//訪问D层,连接数据库User euser = new User();euser = duser.DLogin(User);//接下来的任务在D层中进行。从数据表中获取该username的password//假设该用户输入的password与数据表中的一样,则为真,登录成功;反之为假。if (euser .Pwd ==User .Pwd )//euser是D层返回的实体类。携带着数据库中存储的用户信息,User携带用户输入的用户信息,将二者携带的password进行比較{return true;}else{return false;}//得到真假后。回到U层。回馈给用户操作结果}}</span>

DAL:

<span style="font-family:SimSun;font-size:18px;"> public class UserDAL{//连接数据库public static string conString = @"Server=CYL-PC; Database=Login; User ID=sa; Password=123456";SqlConnection cnn = new System.Data.SqlClient.SqlConnection(conString);//依据输入的username获取用户passwordpublic User DLogin(User user){string sqlString="select * from Users where UserName='"+user .UserName +"'";User euser = new User();SqlCommand cmd = new SqlCommand(sqlString, cnn);//打开数据库cnn.Open();SqlDataReader read;read = cmd.ExecuteReader();read.Read();//将User表中的用户信息赋予给实体类。并将其返回B层euser.UserName = read[0].ToString();euser.Pwd = read[1].ToString();return euser;}}</span>

数据库Login中User表:

代码中的凝视写得比較详细,但在实际运行中。并非一条龙运行下去。U层引用B层,B层引用D层。这三层都引用Entity。

接下来将上述流程总体串一下。启动系统后。首先显示系统登录界面,用户输入username和password后进行password验证(若不输入。点“确定”后系统检測到空,又一次回到登录界面)。

详细的验证过程是这种,三层都需实例化一个实体层中的User对象,当中U层的User携带用户输入的用户信息(username和password);D层依据用户输入的username在数据库中找到该用户信息,让D层的User携带,然后传递给B层的User。在B层运行详细的验证过程。U层User携带的password与B层User携带的password比較,若二者同样,则显示“登录成功”向用户反馈,反之提醒“登录失败”。

我的表达能力有限,预知清晰的运行内幕,逐语句调试(F11)。

在这三层中。DAL仅仅提供主要的数据訪问,UI仅仅负责显示和採集用户操作,他们都不包括不论什么与业务相关的逻辑处理。BLL负责处理业务逻辑,通过获取UI传来的操作指令,运行业务逻辑,在须要訪问数据源的时候交给DAL处理。

处理完毕后,返回必要的数据给UI。

实体层在他们之间上蹿下跳。三层都不知道User中的详细内容。这样做的优点就是,实现了高内聚,低耦合。

各层分工协作,各司其职。有条不紊。增强了软件系统的可扩展性、可复用性、可维护性。

转载于:https://www.cnblogs.com/mfrbuaa/p/5251534.html

三层学习------实践篇相关推荐

  1. 三层架构-----实践篇-登录小实例

    上一篇博客小编简单介绍了一下我们在软件开发过程中应用到的三层架构基本理论.光有理论还是远远不够的,只有真正的 在项目中实践过,才能更好地理解它的精髓所在.接下来小编以一个实现登录功能的小例子来展现三层 ...

  2. 【三层学习】认识UI、BLL、DAL

    粗识三层 1.三层结构分别是:显示层(UI).业务逻辑层(BLL).数据访问层(DAL) 2.应用场景 不用三层:业务逻辑简单.没有数据存储 用三层:业务复杂.数据存储到数据库 3.机制 UI-> ...

  3. 三层架构—实践篇(.Net登录实例)

    一.框架的搭建 U层引用Model层 B层引用Model层和DAL层 D层引用Model层和数据库连接ImportsSystem.Data.SqlClient 二.UML图 1.类图 U层:Windo ...

  4. 基于深度学习和迁移学习的识花实践

    深度学习是人工智能领域近年来最火热的话题之一,但是对于个人来说,以往想要玩转深度学习除了要具备高超的编程技巧,还需要有海量的数据和强劲的硬件.不过 TensorFlow 和 Keras 等框架的出现大 ...

  5. 【学习打卡02】可解释机器学习笔记之ZFNet

    可解释机器学习笔记之ZFNet 文章目录 可解释机器学习笔记之ZFNet ZFNet介绍 ZFNet结构 特征可视化 可视化结构 特征不变性 特征演化 遮挡性分析 其他内容 总结和思考 首先非常感谢同 ...

  6. cv算法工程师学习成长路线

    前言 一,计算机系统 1.1,计算机系统书籍 1.2,设计模式教程 二,编程语言 2.1,C++ 学习资料 2.2,Python 学习资料 三,数据结构与算法 3.1,数据结构与算法课程 3.2,算法 ...

  7. 2019年终总结:好好爱自己

    前言: 回顾培养计划学过的东西,自己给个评分,标准(独立,拼尽全力,内心满足),但这一块很多是不由我自己控制的 回顾内心成长的过程,给满分,因为真的尽全力的在做,没有遗憾和后悔. 专业学习阶段: 00 ...

  8. Deep Learning论文笔记之(七)深度网络高层特征可视化

    Deep Learning论文笔记之(七)深度网络高层特征可视化 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文,但老感 ...

  9. 论文笔记:ZFNet

    ZFNet 1.四个问题 要解决什么问题? 卷积神经网络具有很好的效果,在ImageNet上取得了开创性的成果,但是我们对其却没有一个直观的认识,以及它为何效果这么好,全当成黑盒子来用. 用了什么方法 ...

最新文章

  1. jtabel 遍历_Swing中经常会遇到的若干问题——JTable(持续更新) | 学步园
  2. 技术团队的工程师文化:效率与价值
  3. 95-235-070-源码-task-OneInputStreamTask
  4. Hibernate的学习详解(4)
  5. [Java] Maven 建立 Spring MVC 工程
  6. Java — 【报错】Parameter index out of range (1 number of parameters, which is 0).
  7. 实现四台服务器的负载均衡
  8. VUE ---- 利用vue-print-nb实现打印功能
  9. WinForm编程开发实用技巧14则(转)
  10. 现金支票打印模板excel_施工表格填写不规范?500套最全施工资料表格模板,可直接套用|面层|分项...
  11. 全迹科技化工人员定位系统助推裕泰化工集团安全管理智能升级
  12. MSP430编译MLX90614失败
  13. iOS滤镜实现之LOMO(美图秀秀经典LOMO)
  14. 凡是能用钱买来的时间就是便宜的;凡是能用时间换来的注意力持续就是有价值的。
  15. 家庭局域网文件共享,轻松互联手机与电脑
  16. nginx resolver失败
  17. 模拟城市服务器连接中断 正试着,【模拟城市5】确认DRM在线 中断不会被踢
  18. Github创建、删除organization
  19. 高通平台ITS:sensor_fusion test_sensor_fusion.py Fail
  20. 计算机课范文,计算机课程论文范文 计算机课程方面论文范文文献2500字

热门文章

  1. 关于a标签的 href 与 onlick
  2. 推荐一款移动端日历App吉日历
  3. 【dmp文件还原到oralce数据库】
  4. SGU 109 Magic of David Copperfield II
  5. Enterprise Library深入解析与灵活应用(3):倘若将Unity、PIAB、Exception Handling引入MVP模式.. .. .....
  6. java 大臣的旅费_PREV-9-蓝桥杯-历届试题-大臣的旅费-java
  7. python函数中可变参数的传递方式是_Python中函数的参数传递与可变长参数
  8. Docker网络相关
  9. POJ3080方法很多(暴力,KMP,后缀数组,DP)
  10. 3764树上的异或值(自己研究的静态字典树)