首页 > 其他 > 详细

机房收费系统重构(六)—泛型集合

时间:2014-07-23 20:56:45      阅读:366      评论:0      收藏:0      [点我收藏+]

      机房收费系统重构仍在进行,但是在进行过程中,也许数据类型的转换是永远也避不开的,今天我就来讲讲关于数据类型转换的问题!

      在个人版机房收费系统中,在DAL层中,如果是增删改,是不需要返回参数的,返回值是Boolean,但是在查询中,需要有返回值,而且返回的是Dateset类型,所以在这里问题就来了。

     如果在返回值过程中一直返回的是表的类型,也许就没有那么多麻烦的事情了,但是dateset使得系统具有了强耦合性,但是如果返回的是实体类呢!关于这点我也查了查资料,为什么使用表会导致强耦合性呢?

     比如用户的信息发生了变化,我们需要改动表的数据,但是我们需要去DAL层去修改数据,导致系统不易维护,但是返回实体类我们修改用户的信息直接在实体类中就可以了!

     下面来看看机房收费中学生充值记录查询!(只贴部分代码)

  bubuko.com,布布扣

在DAL层中得到基本数据信息

  

Imports System.Data.SqlClient
Imports System.Data
Imports IDAL
Public Class DA_QueryChargeRec : Implements IDAL.IQueryChargeRec
    ''' <summary>
    ''' DAL层功能块,这里需要调用DateSetToList这个方法,然后进行数据转换。
    ''' </summary>
    ''' <param name="ChargeRec">实体类的命名</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function QueryCharge(ChargeRec As Model.MO_QueryChargeRec) As List(Of Model.MO_QueryChargeRec) Implements IDAL.IQueryChargeRec.QueryCharge
        Dim sqlparamas As SqlParameter() = {New SqlParameter("@CardNo", ChargeRec.CardNo)}
        Dim cmdtext As String = "select * from T_RechargeInfo where CardNo=@CardNo"  '查询数据库
        Dim DateSetList As New DA_DateSetToList  '实例化数据转换功能类
        Dim helper As New SqlHelper              '实例化sqlhelper
        Dim cmdtype As CommandType = New CommandType()
        cmdtype = CommandType.Text
        Dim table As New DataTable               '实例化一个表
        table = helper.ExecuteQuery(cmdtext, cmdtype, sqlparamas)  '返回表的数据
        If table.Rows.Count <> 0 Then                              '判断表是否为空
            Return DateSetList.DateSetToList(table)               '调用DateSetToList方法,返回泛型实体
        Else
            Return Nothing
        End If
    End Function
End Class
下面来看看上面调用的DateSetToList这个方法的代码:

Public Class DA_DateSetToList : Implements IDAL.IDateSetToList
    Public Function DateSetToList(ByVal dt As DataTable) As IList(Of Model.MO_QueryChargeRec) Implements IDAL.IDateSetToList.DateSetToList
        '定义泛型集合
        Dim list As New List(Of Model.MO_QueryChargeRec)
        Dim type As Type = GetType(Model.MO_QueryChargeRec)
        '定义临时变量
        Dim tempName As String

        '遍历数据表中的每一行
        For Each dr As DataRow In dt.Rows
            '创建充值基本信息实体类
            Dim MoRechargeInfo As New Model.MO_QueryChargeRec
            Dim Propertys() As System.Reflection.PropertyInfo = MoRechargeInfo.GetType().GetProperties() '获得实体类enRechargeInfo的所有属性,并存放到数组中
            '遍历该对象的所有属性
            For Each pi As System.Reflection.PropertyInfo In Propertys
                tempName = pi.Name '将属性名称赋值给临时变量

                '检查DataTable是否包含此列(列名=对象的属性名)
                If dt.Columns.Contains(tempName) Then '如果包含此列
                    If Not pi.CanWrite Then '如果该属性不可写,直接跳出
                        Continue For
                    End If
                    '如果该属性可写入
                    Dim value As Object = dr(tempName)
                    '如果非空,则赋给对象的属性
                    If Not IsNothing(value.ToString()) Then
                        Dim a As String = value.ToString().Trim()
                        pi.SetValue(MoRechargeInfo, a, Nothing)
                    End If
                End If
            Next
            list.Add(MoRechargeInfo) '将充值信息实体添加到集合中
        Next

        Return list '返回泛型集合

    End Function
End Class
    关于上面这个方法也许就是SqlHelper一样,算是一个模板吧,想用就会拿过来用。关于泛型集合代码还要多加研究。

   最后就是BLL层返回泛型集合,和UI层的展示部分了!

bubuko.com,布布扣

      关于这一部分自己理解也不是特别透彻,是自己敲到这里,给自己做一个快照,记录自己存在的问题,如有疑问和意见,踊跃拍砖!

  

机房收费系统重构(六)—泛型集合,布布扣,bubuko.com

机房收费系统重构(六)—泛型集合

原文:http://blog.csdn.net/u010158267/article/details/38067985

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!