1. 程式人生 > >DataSet轉換為實體(函式)

DataSet轉換為實體(函式)

          個人版機房時,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了吧….

         偷偷告訴大家,還是返回實體,但是這次不是返回一個實體啦,是返回”一群“實體(實體集合)

具體是如何實現的,請關注下篇部落格!!