一、框架的搭建

U层引用Model层

B层引用Model层和DAL层

D层引用Model层和数据库连接ImportsSystem.Data.SqlClient

二、UML图

1、类图

U层:Windows1

B层:LoginUser

D层:UserDAO

Model层:UerEn

2、时序图

3、包图(设计模式在代码中未体现,以后补充)

Link用来存储连接字符串及SQL语句(以后补充)

三、代码展示

1、实体类

[vb] view plaincopy
  1. <span style="font-size:18px;">Public Class UserEn
  2. '定义所用到的属性
  3. Private _userName As String
  4. Public Property UserName As String
  5. Get
  6. Return _userName
  7. End Get
  8. Set(ByVal value As String)
  9. _userName = value
  10. End Set
  11. End Property
  12. Private _password As String
  13. Public Property Password As String
  14. Get
  15. Return _password
  16. End Get
  17. Set(ByVal value As String)
  18. _password = value
  19. End Set
  20. End Property
  21. End Class</span>

2、U层

[vb] view plaincopy
  1. <span style="font-size:18px;">Imports Login.BLL           '层中引用,在调用对象时不用写命名空间名
  2. Imports Model
  3. Public ClassStartWindow
  4. '退出程序
  5. Private Sub btnexit_Click(sender As Object,e As EventArgs) Handles btnexit.Click
  6. End
  7. End Sub
  8. '登录
  9. Private Sub btnOK_Click(sender As Object, eAs EventArgs) Handles btnOK.Click
  10. Try
  11. Dim user1 As New UserEn                 '实例化实体类,user1为实体类的对象
  12. Dim check As New LoginUser              '实例化B层的LoginUser类
  13. Dim user As Boolean                    '定义布尔型变量,用来返回(也可定义为实体类型,返回实体类)
  14. <span style="font-size:18px;">            </span>user1.UserName =txtUserName.Text.Trim    '把文本框用户名赋给实体类中的UserName
  15. user1.Password =txtPassword.Text          '同理
  16. If txtUserName.Text = ""Then              '判断用户名文本框是否为空
  17. MessageBox.Show("请输入用户名!")
  18. End If
  19. If txtPassword.Text = ""Then               '同理
  20. MessageBox.Show("请输入密码!")
  21. End If
  22. user = check.Login(user1)                  '把B层Loin方法判断返回的值赋予user,左右同时为真则登录成功
  23. MessageBox.Show("成功登录!")
  24. Catch ex As Exception                           '捕获从B/D层抛出的异常
  25. MsgBox(ex.Message)
  26. End Try
  27. End Sub
  28. End Class</span>

3、B层

[vb] view plaincopy
  1. <span style="font-size:18px;">Imports Model
  2. Imports Login.DAL
  3. Public ClassLoginUser
  4. Function Login(ByVal user1 As Model.UserEn)As Boolean
  5. Dim Dal As New UserDAO             '实例化D层UserDAO对象
  6. Dim user2 As Boolean                '定义变量
  7. user2 = Dal.SelectUser(user1)      '调出D层方法SelectUser
  8. '判断返回结果
  9. If user2 Then
  10. Return True
  11. Else
  12. Throw NewException("登录失败!")
  13. Exit Function
  14. End If
  15. End Function
  16. End Class</span>

4、D层

[vb] view plaincopy
  1. <span style="font-size:18px;"><span style="font-size:18px;">Imports Model
  2. ImportsSystem.Data.SqlClient           '数据库连接需引用
  3. ImportsSystem.Data.SqlClient.SqlCommand
  4. Public Class UserDAO
  5. '连接数据库
  6. 'SqlConnection表示一个到 SQL Server数据库的打开的连接。此类不能被继承。
  7. Dim connDB As String ="Server=.;Database=MyLogin;User ID=sa;Password=123;"
  8. Dim connSQL As SqlConnection = NewSqlConnection(connDB)
  9. Function SelectUser(ByVal user1 AsModel.UserEn) As Boolean
  10. '把要执行的SQL语句赋给字符串变量sql
  11. Dim sql As String = "select * FromUserInfo where UserID=@UserName AND Password=@Password;"
  12. Dim cmd As SqlCommand = NewSqlCommand(sql, connSQL)         '执行查询语句
  13. '通过把实体的相关内容赋给参数,再将参数带到数据库对比(防止SQL注入)
  14. cmd.Parameters.Add(NewSqlParameter("@UserName", user1.UserName))
  15. cmd.Parameters.Add(NewSqlParameter("@Password", user1.Password))
  16. '打开连接,读取数据
  17. connSQL.Open()
  18. Dim read As SqlDataReader =cmd.ExecuteReader()
  19. '若存在数据则返回True,否则相反
  20. If read.Read() Then
  21. Return True
  22. Else
  23. Return False
  24. Exit Function
  25. End If
  26. End Function
  27. End Class</span>
  28. </span>

结果:

四、知识点小结

1、传实体与传参数区别

在参数较少的情况下,使用传参比较方便;用的参数较多建议使用传实体,效率较高

注意:如果在界面上显示数据则设计到对实体的拆装箱操作

例子:C#语言

[csharp] view plaincopy
  1. <span style="font-size:18px;"> user.ID = reader.GetInt32(0);
  2. user.UserName = reader.GetString(1);
  3. user.Password = reader.GetString(2);
  4. if(!reader.IsDBNull(3))
  5. {
  6. user.Email = reader.GetString(3);
  7. }</span>

2、每层引用与单层Imports引用区别

层与层间引用:可以通过命名空间.类名,实现调用

层中Imports引用:直接写调用的类名即可

3、实例化对象与定义同类型变量区别

newUserEn()是指在内存中开辟了一块空间,创建了一个对象,然后让一个UserEn类型的变量user引用(指向)它。user也只不过是创建的那个实体对象的名称而已。

三层架构—实践篇(.Net登录实例)相关推荐

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

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

  2. 基于c#的三层架构实现注册登录功能模块

    首先介绍一下c#,也叫c shape,是由微软开发语言,它和java类似都是面向对象的编程语言,下面我将详细介绍使用c#编写一个小项目,可以记录自己的学习成果,也可以方便复习. 目录 1.创建项目骨架 ...

  3. Web开发之三层架构

    目录 前言 正文内容 分层与分层模式 分层 分层模式 为什么需要分层模式 分层开发的优势 分层的特点 分层的原则 1.封装性原则 2.顺序访问原则 三层架构(三层模式) 三层架构的划分(哪三层) 三层 ...

  4. SMBMS 三层架构的简单案例 (超市订单管理系统)

    14.SSM框架 SMBMS MVC三层架构 SMBMS基础登录演示 1.搭建一个mawen-web项目 2.测试Tomcat是否正常运行 配置最新的web.xml配置 否则可能css样式不能呈现 3 ...

  5. “七层架构”-----实践篇-登录小实例

    上一篇博客小编简单介绍了一下近期在软件开发过程中由三层架构演变而来的"七层架构"基本理论点.理论知识与产生结果之间还夹杂着一个重要的点---实践.用实践来检验理论知识,丰富知识内涵 ...

  6. 三层架构用户登录代码c语言,网站用户登录、注册和修改密码常用代码,采用三层架构...

    创建用户表的Sql语句,数据库为SQL Server2000: create table "User" ( UserID int not null, UserName varcha ...

  7. c#利用三层架构做一个简单的登录窗体

    就个人而言,三层架构有点难理解,不知道该如何下手,各层与各层之间怎么调用 最近一直在研究三层架构,经过网上学习与多方打听写一下自己的心得.有不足之处,可以评论和私聊探讨 言归正传: 三层架构(3-ti ...

  8. C#学习之三层架构实例

    如有雷同,不胜荣欣,如转载,请注明 一.三层架构实例 首先学习三层架构模式­--三层架构实现的留言和查看留言 下面是本人学习三层架构的一点感想和理解,肯定有许多不足的地方,欢迎大家斧正,谢谢,废话到此 ...

  9. java三层架构项目事例_三层架构实例

    一.概要 在我的上一篇博客中,我们谈了谈分层,到底为什么分层(http://blog.csdn.net/shan9liang/article/details/6836300) 这篇博客,准备用一个小D ...

最新文章

  1. 应用服务攻击工具clusterd
  2. 每日一博 - Review线程池
  3. 【学习笔记】18、函数的其他功能
  4. Linux常用命令和服务器配置
  5. LeetCode 1552. 两球之间的磁力(极小极大化 二分查找)
  6. android mysql实现登录注册_android简单登陆和注册功能实现+SQLite数据库学习
  7. 共享按摩椅理财系统|金融投资理财系统
  8. 加油卡 格式判断 java_JAVA实验_题目8
  9. 通过json动态创建控制器
  10. 机器学习知识体系 (强烈推荐)
  11. 19-3-1Python的PyCharm编辑器,以及格式化输出、while循环、运算符、编码初识
  12. python 中的list 转 array 以及 array 转 list 以及array.array numpy.array
  13. 两种云原生技术在弹性计算的使用、原理和思考
  14. JSP概述--JSP的起源,本质,运行原理
  15. IntelliJ IDEA开发工具插件GsonFormat插件安装使用
  16. 2019年上海理工大学《高等代数》试题和答案——解题人(蔡宇)
  17. 2017数学建模b题回顾_年度回顾:2017年的Java
  18. Cpu调优 mpstat 命令
  19. 西藏拉姆拉错:蓝蓝的湖水
  20. 数据增强方法:图片镜像、图片缩放、图片旋转、加噪点

热门文章

  1. nmap之扫描端口(附加hping3隐藏扫描)
  2. Annotataion
  3. 在QT中结构体快速从二进制文件中读取数据
  4. 利用 PortableBasemapServer 发布地图服务
  5. 第三周总结CoreIDRAW
  6. node.js入门系列(一)--Node.js简介
  7. Visual C++ 2011-5-27
  8. C++中多态与虚函数的学习例子
  9. Flutter介绍 - Flutter,H5,React Native之间的对比
  10. DevExpress XtraTabControl 加载Form