从SQLhelper和D层体会“形式主义”

     一直以来我都特别讨厌形式主义,慢慢地发现不只是生活中,就连学习上也是这么多的形式主义,我想鄙视那些说话办事形式主义的人,可是他们又常常真的把事情办得很好;参加比赛写个文档,自己写的那叫一个“淳朴”,再看人家的,程式化的语言,格式又正确,按套路来哪里都规范。就连写代码相当一部分都是Ctrl+CCtrl+V过去的,因为代码中就有大量的程式化的东西。现在才知道,形式主义常常让我们有法可依有章可循,既是规范又可以在保证正确的前提下省去很多力气。

之前专门写过SQLHelper,是为了使代码更简洁才一次一次地重构,最终在D层封装了一个数据库助手类,就是SQLHelper。这样就省去了频繁地写数据库连接和创建命令对象。我写的SQLHelper共有四类,有参无参和查询非查询的组合,以下面两个为例:

 

''' <summary>
    ''' 执行不带参数的增删改的方法
    ''' </summary>
    ''' <param name="cmdType">需要执行语句,sql语句或者存储过程</param>
    ''' <param name="strText">命令类型(文本或者存储过程)</param>
    Public Function ExecuteNoQuery(ByVal cmdType As CommandType, ByVal strText As String) As Boolean
        Dim res As Integer
        Try
            sqlCmd = New SqlCommand(strText, ConnectSQL())          '创建命令对象
            sqlCmd.CommandType = cmdType                            '执行命令类型
            res = sqlCmd.ExecuteNonQuery()                          '执行增删改操作
        Catch ex As Exception
            Throw ex                                                '捕捉错误
            sqlConn.Close()                                         '关闭数据库连接
            Return False
        End Try
        sqlConn.Close()
        Return True

    End Function

    ''' <summary>
    ''' 执行带参数的增删改操作
    ''' </summary>
    ''' <param name="sqlParams ">参数数组</param>
    ''' <param name="cmdType">查询sql语句或者存储过程</param>
    ''' <param name="strText">命令类型(文本或者存储过程)</param>
    Public Function ExecuteNoQuery(ByVal sqlParams As SqlParameter(), ByVal cmdType As CommandType, ByVal strText As String) As Boolean
        Dim res As Integer
        Try
            sqlCmd = New SqlCommand(strText, ConnectSQL())
            sqlCmd.Parameters.AddRange(sqlParams)
            sqlCmd.CommandType = cmdType
            res = sqlCmd.ExecuteNonQuery()
        Catch ex As Exception
            Throw ex
            sqlConn.Close()
            Return False
        End Try
        sqlConn.Close()
        Return True
    End Function


 

     这两个函数的函数名相同但参数个数不同,在操作类中根据有无参数来确定要调用哪一个,这是多态。SQLHelper的四个函数代码几乎一样,绝对算得上“形式主义”。

     早就听说合作开发的时候写D层几乎没什么,现在看,确实是这样,SQLHelper里面,第一,有参的要写:sqlCmd.Parameters.AddRange(sqlParams)

第二,返回受影响的行数:res = sqlCmd.ExecuteNonQuery()

还是datatable:sdr = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection)

               dt.Load(sdr)

除此之外,都可以Ctrl+C了。

     操作类也一样,每个方法中,方法名不同调用的存储过程就不同,根据实体确定参数,根据参数和返回值来确定调用sqlhelper的哪个方法。以查看余额为例:

  ''' <summary>
    ''' 查看卡内余额接口,根据实体中卡号strCardID查找表T_CardInfo中Balance余额。
    ''' </summary>
    ''' <param name="enCard"></param>
    Public Function SelectCardBalance(ByVal enCard As CardInfoEntity) As DataTable Implements ISQLCardInfoDAL.SelectCardBalance
        Dim strSql As String                                '定义执行命令字符串
        Dim dt As DataTable                                 '定义返回值变量
        Dim sqlParames As SqlParameter()                    '定义存储过程中的参数组合
        sqlParames = New SqlParameter() {
            New SqlParameter("@cardID", enCard.strCardID)
        }
        strSql = "PROC_SelectCardBalance"                   '存储过程名赋值
        dt = sqlHelper.GetDataTable(sqlParames, CommandType.StoredProcedure, strSql)   '调用sqlhelper方法
        Return dt
    End Function

 

    一个函数写完了就约等于整个D层都写完了,其实我们定义一个函数,就是为了避免相同的程序段在程序中重复出现,在需要它时只需要调用相应的函数。这样不仅可以使我们编写的程序精简,而且可以使我们的程序更富有可读性。看看形式主义有多么高效和便利!

你可能感兴趣的:(重构,多态)