剖析三层——登陆实例

     最近学习三层也有几天的时间了,真应了那句话,万事开头难,一个简单的例子在我手里也折腾了好几天才理解清楚,不过弄明白了,才发现其实挺简单的,下面就跟大家分享下我理解的三层!

概念剖析

表现层(UI):也就是我们经常看到的界面,比如说弹出来的对话框,需要我们输入密码和用户名!

业务逻辑层(BLL):用来作为U层和D层之间数据传递的介质,接收U层和D层传递过来的数据,在B层进行判断!(判断能否正常登陆)

数据访问层(DAL):连接数据库,在这层中完成对数据库中的数据进行 增删改查的过程!

区分层次的目的即为了“高内聚,低耦合”的思想。

*****************************************************************

下面我们以一个简单的登陆为例,再度深入理解三层



登陆流程图:

(这里的图用的是亿图画的,大家还有好的方法,及时分享哦~)


                                                                                                                       剖析三层——登陆实例_第1张图片


*****************************************************************************

代码篇:

          剖析三层——登陆实例_第2张图片

首先我们用VB先建立这几个项目,这里除了三层(U,B,D)层之外,新建了一个实体层LoginModel,用来存放实体。

这样做的好处:点击打开链接


介绍下显示层的代码:

当我们成功输入用户名和密码之后,程序执行到B层接口那里,跳转到B层

<span style="font-family:KaiTi_GB2312;font-size:24px;">Imports LoginModel
Imports Login_BLL
Imports Login_DAL

Public Class frmLogin

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        '定义参数user,用来获取实体层的参数
        Dim user As New UserInfo
        '将用户输入的信息进行赋值
        user.name = txtUserName.Text.Trim()
        user.psword = txtPassWord.Text
        '定义访问B层的一个接口,从这跳转到B层
        Dim buser = New Login_BLL.LoginService
        '显示是否能成功登陆
        Dim enuser = buser.userLogin(user)
        MessageBox.Show("您好,登录成功!登录用户:" + user.name)

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        End
    End Sub
End Class
</span>

B层代码:

<span style="font-family:KaiTi_GB2312;font-size:24px;">Imports LoginModel
Imports Login_DAL

Public Class LoginService

    Public Function userLogin(ByVal user As UserInfo) As LoginModel.UserInfo
        '定义一个与D层连接的接口
        Dim uDao As New Login_DAL.UserDAO
        Try
            user = uDao.selectUser(user)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

        '判断是否能成功登陆
        Try
            If (user.name <> "" And user.psword <> "") Then
                <pre code_snippet_id="381521" snippet_file_name="blog_20140607_3_7590809" name="code" class="vb">                Throw New Exception("登陆成功")
Else Throw New Exception("登陆失败") End If Catch ex As Exception
           Throw New Exception("登陆失败")
End Try Return user End FunctionEnd Class</span>
 
 

D层代码:

<span style="font-family:KaiTi_GB2312;font-size:24px;">'引用LoginModel项目
Imports LoginModel
'引用命名空间system.data.sqlclient
Imports System.Data.SqlClient

Public Class UserDAO
    '定义连接数据库字符串
    Dim sconn As String
    Dim dbconn As SqlConnection
    Dim UserDAO As Object
    '读取数据库信息的方式
    Dim myreader As SqlDataReader
    '访问实体层信息
    Dim name1 As LoginModel.UserInfo


    '定义函数连接数据库的一个过程
    Public Function getConn() As SqlConnection
        sconn = "Server=.;database=Login;integrated security=sspi"
        '实例化
        dbconn = New SqlConnection(sconn)
        Return dbconn
    End Function
    '定义一个SelectUser方法,用于实现对数据库的查询,读取数据库中的信息!
    Public Function selectUser(ByVal model As UserInfo) As LoginModel.UserInfo
        Dim sqlconn As SqlConnection = Me.getConn()
        '打开数据库连接
        sqlconn.Open()

        Dim sqlstring As String = "select UserName,PassWord from Users where UserName=@UserName and PassWord=@PassWord"
        Dim cmd As New SqlCommand(sqlstring, dbconn)
        '访问数据库的方法
        cmd.CommandText = sqlstring
        cmd.CommandType = CommandType.Text
        cmd.Parameters.Add(New SqlParameter("@UserName", model.name))
        cmd.Parameters.Add(New SqlParameter("@PassWord", model.psword))

        cmd.CommandType = CommandType.Text

        '到数据库中读取数据库的信息,读取数据库中的信息有很多种方法,这里只先介绍一种
        myreader = cmd.ExecuteReader()

        name1 = Nothing
        While (myreader.Read())
            If name1 Is Nothing Then
                name1 = New LoginModel.UserInfo
                '将数据库中的值赋值给name1
                name1.name = myreader.GetString(0)
                name1.psword = myreader.GetString(1)
            End If
        End While
        '返回的值将返回到B层进行判断
        Return name1

    End Function
End Class
</span>


好了,到这基本上登陆的小例子就能实现了!


********************************************************

体会:三层基本上就是实现一个解耦的过程,分解了代码之间的联系程度,就好像我们想换个数据库使用,只用更改其中的几句代码就行!但是三层的使用也得合适,就像这个登录的小例子,在这就感觉有种大材小用的感觉,不过以后当我们敲大型的系统用到三层的思想就非常有好处的!!无论什么思想和方法,都需要我们在实践中反复练习才能深刻的理解!


你可能感兴趣的:(剖析三层——登陆实例)