加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

VB.net版机房收费系统——Boolean、DataTable和泛型

发布时间:2020-12-17 07:40:16 所属栏目:百科 来源:网络整理
导读:上周看到一篇CSDN博客的下边评论了这样一句话:有一种手贱,叫不小心点了“舍弃”。看到以后,觉得评论者真心有意思~ 本周博客还没发,就在晚饭前,花了一个多小时的时间写博客,最后关头,手很不听使唤地点了“舍弃”,瞬间不想吃饭了,可是转念一想,我需

  上周看到一篇CSDN博客的下边评论了这样一句话:有一种手贱,叫不小心点了“舍弃”。看到以后,觉得评论者真心有意思~

  本周博客还没发,就在晚饭前,花了一个多小时的时间写博客,最后关头,手很不听使唤地点了“舍弃”,瞬间不想吃饭了,可是转念一想,我需要冷静一下,还是去吃饭吧~当然,由于情绪期初有点激动,泄露了自己的嗅事,被同屋的同学们笑了一通,怪只怪平时不太“积德”,我发誓,从此刻起,再也不损别人了……

  我知道,当读者看完以上内容,就知道这篇博客的评论该怎么写了,即便如此,我还是要强忍着悔恨的泪水,立志写出一篇更好的博客。

  本篇博客主要讲Boolean、DataTable和泛型,通篇采用对比的风格,结合代码和图片体现自己的理解。

写作背景

  当我敲七层登录的时候,各层的返回值定义的是Boolean,实现了这个功能以后,觉得应该顺便把和登录有关系的功能都给实现,比如将用户上班的工作记录插入表中(T_Worklog_Info),然后又走了一遍七层,中途出了错,向师德帅请教,被他“狠批”了一顿,原因有二:一是为什么要再走一遍七层,而不是直接在D层的时候就把相应的数据插入表中;二是为什么不注意每一层的返回值类型呢?我用Boolean作返回值是可以判断登录成功,但是却没想过后期功能需不需要用库里里边其他信息,若是需要的话,就得用DataTable或是泛型了。

  听了他的话,忽然间开窍了,发现自己忽略了全局观,有种瞻前不顾后、竭泽而渔的感觉。

Boolean

  当我们只需要返回一个结果的时候,例如注册成没成功,用Boolean就够了。如果把U层比作是一个领导,他发出了命令,让各层去执行,最后得到的反馈只需是被告知成没成功、效果如何即可,他不需要下属反馈一个还需要他做最后审核的表格,故此类情况最好不用DataTable作返回值。

DataTable和泛型

  上文讲的Boolean类型返回值是不需要返回其他信息的,只需要判断即可。而DataTable和泛型的使用情况和Boolean相反,然而二者对其他要用到的信息的返回形式又是不一样的,下面先展示一下机房重构登录功能的D层代码:

<span style="font-family:KaiTi_GB2312;">Public Class dUserLogin : Implements IDAL.IUserLogin
    '实现接口中的SelectUserInfo方法,判断用户名和密码输入的正确性
    Public Function SelectUserInfo(UserInfo As Entity.eUserLogin) As List(Of Entity.eUserLogin) Implements IUserLogin.SelectUserInfo
        Dim i As Integer
        Dim helper As New SqlHelper
        Dim cmdType As CommandType = New CommandType()
        Dim paras As SqlParameter() = {New SqlParameter("@UserName",UserInfo.UserID),New SqlParameter("@PassWord",UserInfo.PassWord)}
        Dim cmdText As String
        cmdText = "Select * from T_User_Info where UserID=@UserName And PassWord=@PassWord"
        Dim dt As New DataTable
        dt = helper.ExecSelect(cmdText,CommandType.Text,paras)

        'DataTable转泛型
        Dim mylist As List(Of Entity.eUserLogin)
        mylist = ConvertToList.ConvertToList(Of Entity.eUserLogin)(dt)
        '如果返回的泛型mylist中有记录,即用户名和密码输入正确
        If mylist.Count <> 0 Then
            Dim Worklog As New Entity.eWorklog
            '用DataTable作返回类型,需要某些返回字段的时候如下写:
            'Worklog.UserID = dt.Rows(0)(1)
            '将DataTable转化为泛型作返回类型,需要某些返回字段的时候如下写:
            Worklog.UserID = mylist(i).UserID
            Worklog.UserName = mylist(i).UserName
            Worklog.UserLevel = mylist(i).UserLevel
            Worklog.LoginDate = Format(Now,"yyyy-MM-dd")
            Worklog.LoginTime = Format(Now,"HH:mm:ss")
            Worklog.Computer = System.Net.Dns.GetHostName().ToString()
            Worklog.IsWork = "Y"
            '**********************************************
            '添加上机工作记录
            Dim parasAdd As SqlParameter() = {New SqlParameter("@UserID",mylist(i).UserID),New SqlParameter("@UserName",mylist(i).UserName),_
                                                     New SqlParameter("@Level",mylist(i).UserLevel),New SqlParameter("@LoginDate",Format(Now,"yyyy-MM-dd")),_
                                                    New SqlParameter("@LoginTime","HH:mm:ss")),New SqlParameter("@PCname",System.Net.Dns.GetHostName().ToString()),_
                                                   New SqlParameter("@IsWork","Y")}
            Dim cmdTextAdd As String
            cmdTextAdd = "insert into T_Worklog_Info(UserID,UserName,UserLevel,LoginDate,LoginTime,Computer,IsWork)values(@UserID,@UserName,@Level,@LoginDate,@LoginTime,@PCname,@IsWork)"
            Dim dtAdd As Integer
            dtAdd = helper.ExecAddDelUpdate(cmdTextAdd,parasAdd)
            Return mylist
            '**********************************************
        Else
            Return mylist
        End If
        Return mylist
    End Function
End Class</span>

  利用断点调试,可以看出用DataTable做返回类型返回的是一张表,如下:


  点击了DataTable Visualizer得到下表:


  若是用泛型将得到的DataTable进行转化,得到的是一个“实体”。这就不得不提,泛型的本质就是实体,此处对它先不做过多理解,本文最后会做总结。以下是断点调试,将断点停留在泛型时的状态:


  综上所述,DataTable和泛型最大的不同在于泛型更好的体现了面向对象的思想,从库中查询的相关信息若是想要利用,DataTable需要是知道是哪行哪列,而泛型用数据的字段名来代替,能用转化得到的实体“点”出来,如下:

总结

  Boolean:我只想要一个判断结果,至于过程,交给别人去做。

  DataTable:我不光要一个验证结果,还要和该结果有关的其他信息,且返回的信息必须以表格的形式反馈给我,根据需要去某一行或是某一列去找。

  泛型:“打包思想”的完美体现—— U层实例化的“包裹式”实体承载着需要验证的信息,途径各个“站点”,最后到达了D层,D层将信息给了数据库,数据库验证成功后,返给D层一张DataTable,D层秉承着礼尚往来,投桃报李的优良品性,见这张DataTable利用泛型思想“打包”成一个实体返回,省去了其他“站点”分行分列地定位挑选信息的麻烦,“点”出想要的信息的字段名即可。

感受

  总结Boolean、DataTable和泛型的时候,对七层重构又有了新的理解:一曰承上启下、上传下达、整齐划一,从各层返回值类型就可以看出;二者负反馈思想的完美体现,一去一回,有来有往。

结束语

  虽然上一篇博客不小心点了“舍弃”,然而我相信这篇博客的还原率还是很高的。年终总结的时候,结尾说了句新的一年希望自己变得淑女,遭到了几乎整个12期的炮轰,如今,自己又办了件这样的傻事,预测评论内容会呈现排队阵势……还望小伙伴们手下留情,关注知识,拒绝嘲讽~

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读