U层引用Model层
B层引用Model层和DAL层
D层引用Model层和数据库连接ImportsSystem.Data.SqlClient
1、类图
U层:Windows1
B层:LoginUser
D层:UserDAO
Model层:UerEn
2、时序图
3、包图(设计模式在代码中未体现,以后补充)
Link用来存储连接字符串及SQL语句(以后补充)
1、实体类
Public Class UserEn
'定义所用到的属性
Private _userName As String
Public Property UserName As String
Get
Return _userName
End Get
Set(ByVal value As String)
_userName = value
End Set
End Property
Private _password As String
Public Property Password As String
Get
Return _password
End Get
Set(ByVal value As String)
_password = value
End Set
End Property
End Class
2、U层
Imports Login.BLL '层中引用,在调用对象时不用写命名空间名
Imports Model
Public ClassStartWindow
'退出程序
Private Sub btnexit_Click(sender As Object,e As EventArgs) Handles btnexit.Click
End
End Sub
'登录
Private Sub btnOK_Click(sender As Object, eAs EventArgs) Handles btnOK.Click
Try
Dim user1 As New UserEn '实例化实体类,user1为实体类的对象
Dim check As New LoginUser '实例化B层的LoginUser类
Dim user As Boolean '定义布尔型变量,用来返回(也可定义为实体类型,返回实体类)
user1.UserName =txtUserName.Text.Trim '把文本框用户名赋给实体类中的UserName
user1.Password =txtPassword.Text '同理
If txtUserName.Text = ""Then '判断用户名文本框是否为空
MessageBox.Show("请输入用户名!")
End If
If txtPassword.Text = ""Then '同理
MessageBox.Show("请输入密码!")
End If
user = check.Login(user1) '把B层Loin方法判断返回的值赋予user,左右同时为真则登录成功
MessageBox.Show("成功登录!")
Catch ex As Exception '捕获从B/D层抛出的异常
MsgBox(ex.Message)
End Try
End Sub
End Class
3、B层
Imports Model
Imports Login.DAL
Public ClassLoginUser
Function Login(ByVal user1 As Model.UserEn)As Boolean
Dim Dal As New UserDAO '实例化D层UserDAO对象
Dim user2 As Boolean '定义变量
user2 = Dal.SelectUser(user1) '调出D层方法SelectUser
'判断返回结果
If user2 Then
Return True
Else
Throw NewException("登录失败!")
Exit Function
End If
End Function
End Class
4、D层
Imports Model ImportsSystem.Data.SqlClient '数据库连接需引用 ImportsSystem.Data.SqlClient.SqlCommand Public Class UserDAO '连接数据库 'SqlConnection表示一个到 SQL Server数据库的打开的连接。此类不能被继承。 Dim connDB As String ="Server=.;Database=MyLogin;User ID=sa;Password=123;" Dim connSQL As SqlConnection = NewSqlConnection(connDB) Function SelectUser(ByVal user1 AsModel.UserEn) As Boolean '把要执行的SQL语句赋给字符串变量sql Dim sql As String = "select * FromUserInfo where UserID=@UserName AND Password=@Password;" Dim cmd As SqlCommand = NewSqlCommand(sql, connSQL) '执行查询语句 '通过把实体的相关内容赋给参数,再将参数带到数据库对比(防止SQL注入) cmd.Parameters.Add(NewSqlParameter("@UserName", user1.UserName)) cmd.Parameters.Add(NewSqlParameter("@Password", user1.Password)) '打开连接,读取数据 connSQL.Open() Dim read As SqlDataReader =cmd.ExecuteReader() '若存在数据则返回True,否则相反 If read.Read() Then Return True Else Return False Exit Function End If End Function End Class
1、传实体与传参数区别
在参数较少的情况下,使用传参比较方便;用的参数较多建议使用传实体,效率较高
注意:如果在界面上显示数据则设计到对实体的拆装箱操作
例子:C#语言
user.ID = reader.GetInt32(0);
user.UserName = reader.GetString(1);
user.Password = reader.GetString(2);
if(!reader.IsDBNull(3))
{
user.Email = reader.GetString(3);
}
2、每层引用与单层Imports引用区别
层与层间引用:可以通过命名空间.类名,实现调用
层中Imports引用:直接写调用的类名即可
3、实例化对象与定义同类型变量区别
newUserEn()是指在内存中开辟了一块空间,创建了一个对象,然后让一个UserEn类型的变量user引用(指向)它。user也只不过是创建的那个实体对象的名称而已。