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

一、框架的搭建


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 plain copy
  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.   
  9.         Set(ByVal value As String)  
  10.            _userName = value  
  11.         End Set  
  12.     End Property  
  13.   
  14.     Private _password As String  
  15.     Public Property Password As String  
  16.         Get  
  17.             Return _password  
  18.         End Get  
  19.   
  20.         Set(ByVal value As String)  
  21.             _password = value  
  22.         End Set  
  23.     End Property  
  24. End Class</span>  

2、U层

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

3、B层

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

4、D层

[vb]  view plain copy
  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.     '连接数据库  
  7.     'SqlConnection表示一个到 SQL Server数据库的打开的连接。此类不能被继承。  
  8.     Dim connDB As String ="Server=.;Database=MyLogin;User ID=sa;Password=123;"  
  9.     Dim connSQL As SqlConnection = NewSqlConnection(connDB)  
  10.   
  11.     Function SelectUser(ByVal user1 AsModel.UserEn) As Boolean  
  12.   
  13.         '把要执行的SQL语句赋给字符串变量sql  
  14.   
  15.         Dim sql As String = "select * FromUserInfo where UserID=@UserName AND Password=@Password;"  
  16.         Dim cmd As SqlCommand = NewSqlCommand(sql, connSQL)         '执行查询语句  
  17.   
  18.    
  19.   
  20.         '通过把实体的相关内容赋给参数,再将参数带到数据库对比(防止SQL注入)  
  21.   
  22.         cmd.Parameters.Add(NewSqlParameter("@UserName", user1.UserName))  
  23.         cmd.Parameters.Add(NewSqlParameter("@Password", user1.Password))  
  24.   
  25.         '打开连接,读取数据  
  26.   
  27.         connSQL.Open()  
  28.         Dim read As SqlDataReader =cmd.ExecuteReader()  
  29.   
  30.         '若存在数据则返回True,否则相反  
  31.   
  32.         If read.Read() Then  
  33.             Return True  
  34.         Else  
  35.             Return False  
  36.             Exit Function  
  37.         End If  
  38.     End Function  
  39. End Class</span>  
  40. </span>  

结果:



四、知识点小结

1、传实体与传参数区别

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

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

例子:C#语言

[csharp]  view plain copy
  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.  {  
  7.    user.Email = reader.GetString(3);  
  8. }</span>  

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

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

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

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值