首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分离表示/BLL/DAL

分离表示/BLL/DAL
EN

Code Review用户
提问于 2013-12-05 11:01:10
回答 1查看 487关注 0票数 1

我是ASP.Net的新手,到目前为止,我的代码一直在工作,但在整个地方都是一个错误的混搭,没有真正的结构。我试图教自己如何保持演示文稿/BLL/DAL分开,所以我建立了一个简单的页面来尝试和工作。

页面有三个文本框:时钟号,名字和姓氏。在输入时钟号文本框中的时钟号时,我想去我的数据库,获取时钟号码所属的人的名字和姓氏。

我的DAL由以下三个类组成:

代码语言:javascript
复制
Public Class EmployeeName
Private _FirstName As String
Private _Lastname As String

Public Property FirstName() As String
    Get
        Return _FirstName
    End Get
    Set(value As String)
        _FirstName = value
    End Set
End Property

Public Property LastName() As String
    Get
        Return _Lastname
    End Get
    Set(value As String)
        _Lastname = value
    End Set
End Property
End Class

Public Class EmployeeNameDBAccess

Public Function GetEmployeeName(clockNo As Integer) As EmployeeName

    Dim employeeName As EmployeeName = Nothing
    Dim params As SqlParameter() = New SqlParameter() {New SqlParameter("@clockNo", clockNo)}

    Using tbl As DataTable = SMARTDBHelper.ExecuteParameterisedSelectCommand("getEmployeeName", CommandType.StoredProcedure, params)
        If tbl.Rows.Count = 1 Then
            Dim row As DataRow = tbl.Rows(0)
            employeeName = New EmployeeName
            employeeName.FirstName = row("INITIALS").ToString()
            employeeName.LastName = row("SURNAME").ToString()
        End If
    End Using
    Return employeeName
End Function
End Class



Public Class SMARTDBHelper
Const constr As String = "connection string goes here"


Friend Shared Function ExecuteParameterisedSelectCommand(cmdName As String, cmdType As CommandType, param As SqlParameter()) As DataTable

    Dim tbl As New DataTable()

    Using con As New SqlConnection(constr)
        Using cmd As SqlCommand = con.CreateCommand()
            cmd.CommandType = cmdType
            cmd.CommandText = cmdName
            cmd.Parameters.AddRange(param)

            Try
                If con.State <> ConnectionState.Open Then
                    con.Open()
                End If

                Using da As New SqlDataAdapter(cmd)
                    da.Fill(tbl)
                End Using
            Catch ex As Exception
                Throw
            End Try
        End Using
    End Using

    Return tbl

End Function

End Class

我的BLL由以下类组成

代码语言:javascript
复制
Public Class EmployeeNameHandler

Private employee As EmployeeNameDBAccess

Public Sub New()
    employee = New EmployeeNameDBAccess()
End Sub

Public Function GetFirstname(clockNo As Integer) As String

    Dim emp = employee.GetEmployeeName(clockNo)
    Return emp.FirstName

End Function

Public Function GetLastname(clockNo As Integer) As String

    Dim emp = employee.GetEmployeeName(clockNo)
    Return emp.LastName

End Function
End Class

然后在我的页面上有下面的代码来填充文本框

代码语言:javascript
复制
Protected Sub txtCLock_TextChanged(sender As Object, e As EventArgs) Handles txtCLock.TextChanged

    Dim emp As New EmployeeNameHandler
    Dim cn As Integer = CInt(txtCLock.Text)
    Dim firstname = emp.GetFirstname(cn)
    Dim lastname = emp.GetLastname(cn)

    txtFirstName.Text = firstname
    txtLastName.Text = lastname

End Sub

我很感激这是基本的,但我有兴趣收集意见,如果我走正确的路线在这里?这能用更好的方式做吗?此外,这里几乎没有错误处理,这是一个我很薄弱的话题,所以非常感谢您的建议。

EN

回答 1

Code Review用户

发布于 2013-12-05 21:17:43

以下是几点建议:

可能建议使用Int.TryParse而不是CInt(txtCLock.Text)来解析用户输入,这样就不会得到无效的类型异常。

在一般的错误处理中,您至少可以在txtCLock_TextChanged中的逻辑周围放置一个try/catch,以便在较低层捕获任何错误,或者记录它们,或者在适用的情况下以一种很好的方式呈现给用户。

如果实际上没有引用第一个/姓氏备份字段,则可以使用自动属性,因此不必为每个属性编写get/set。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/36692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档