DataSet转换为实体(函数)

来源:互联网 发布:游族网络大将军 编辑:程序博客网 时间:2024/04/28 07:38

          个人版机房时,D层所有返回值不是DataSet,就是Integer,没有返回实体的函数。机房合作版,我写D层,庞凡(组长)设计的每个类中几乎都有几个函数是返回实体的。我研究了一番,在D层每个类中都定义了一个“数据集DataSet转换为实体”的函数DataSetToModel(参数),这样的话,该类中每个需要返回实体的函数都可以调用这个函数,这就实现了代码复用。

注:之所以定义这个函数,是因为我的SqlHelper中的所有函数的返回值 只有两种——DataSet、Integer,D层返回实体的函数,在调用SqlHelper中返回DataSet类型函数后,还需将DataSet转换为实体)

注:这篇博客不是重点,介绍完这个函数,咱们再来分析一下它的缺陷,以及如何解决,如何做才能达到更好的效果,才能使代码复用性更高

例子:(代码只写D层)机房收费系统为例

管理员打开“基本数据设定”窗体,窗体加载显示最新设置的基本数据(从数据库基本信息表T_BasicDataInfo中查询获得)

 

 

得到基本数据信息——ChecBasicDataInfo(参数)函数——返回值:基本数据信息的实体

 

 

将DataSet转换为基本数据信息实体——DataSetToModel(参数)函数——返回值:基本数据信息的实体

        ''' <summary>        
        ''' 获得基本数据信息实体          ''' </summary>        ''' <param name="row">数据表第一列</param>        ''' <returns>基本数据信息实体</returns>        ''' <remarks></remarks>        Public Function DataSetToModel(ByVal row As DataRow) As BasicDataInfoEntity Implements IDAL.IBasicDataInfoDAL.DataSetToModel            Dim enBasicDataInfo As New Entity.BasicDataInfoEntity '创建基本数据信息实体            If Not IsNothing(row) Then                '1,如果“固定用户半小时费用”列存在                If row.Table.Columns.Contains("FixHalfCash") Then                    If Not IsNothing(row("FixHalfCash")) Then '如果固定用户半小时费用列不为空                        enBasicDataInfo.FixHalfCash = row("FixHalfCash").ToString() '固定用户半小时费用                    End If                End If                '2,如果“临时用户半小时费用”列存在                If row.Table.Columns.Contains("TempHalfCash") Then                    If Not IsNothing(row("TempHalfCash")) Then '如果临时用户半小时费用列不为空                        enBasicDataInfo.TempHalfCash = row("TempHalfCash").ToString() '临时用户半小时费用                    End If                End If                '3,如果“单位递增时间”列存在                If row.Table.Columns.Contains("IncreasingUnitTime") Then                    If Not IsNothing(row("IncreasingUnitTime")) Then '如果单位递增时间列不为空                        enBasicDataInfo.IncreasingUnitTime = row("IncreasingUnitTime").ToString() '单位递增时间                    End If                End If                '4,如果“准备时间”列存在                If row.Table.Columns.Contains("PrepareTime") Then                    If Not IsNothing(row("PrepareTime")) Then '准备时间列不为空                        enBasicDataInfo.PrepareTime = row("PrepareTime").ToString() '准备时间                    End If                End If                '5,如果“最少金额”列存在                If row.Table.Columns.Contains("LeastBalance") Then                    If Not IsNothing(row("LeastBalance")) Then '最少金额列不为空                        enBasicDataInfo.LeastBalance = row("leastBalance").ToString() '最少金额                    End If                End If                '6,如果“用户类型”列存在                If row.Table.Columns.Contains("DivideCash") Then                    If Not IsNothing(row("DivideCash")) Then '判断用户类型列不为空                        enBasicDataInfo.DivideCash = row("DivideCash").ToString() '判断用户类型字段                    End If                End If            End If            Return enBasicDataInfo '返回基本数据信息实体        End Function

 

代码解释:

 

BU层调用,就可以获得基本数据信息啦:

 

思考问题:函数返回值为实体,这意味着什么?

         意味着该函数的返回记录只能有一条,对不对?因为一个实体只能“保存”一条记录。

         像查看某学生基本信息、某用户基本信息——某个人的基本信息只能有一条记录(学生实体:卡号、学号、姓名、…)吧,好,可有定义返回实体函数

 思考问题: 但是,如果“根据日期查看所有收取金额记录”——不止一条记录吧,给你U层返回一个实体,能实现此功能吗?当然不能。

如何解决?

         面对此问题,如何解决,你想过吗?——你说,返回DataSet或DataTable不就得了吗。你看,Out了吧….

         偷偷告诉大家,还是返回实体,但是这次不是返回一个实体啦,是返回”一群“实体(实体集合)

 

具体是如何实现的,请关注下篇博客!!