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
程式碼解釋:
B、U層呼叫,就可以獲得基本資料資訊啦:
思考問題:函式返回值為實體,這意味著什麼?
意味著該函式的返回記錄只能有一條,對不對?因為一個實體只能“儲存”一條記錄。
像檢視某學生基本資訊、某使用者基本資訊——某個人的基本資訊只能有一條記錄(學生實體:卡號、學號、姓名、…)吧,好,可有定義返回實體函式
思考問題:但是,如果“根據日期檢視所有收取金額記錄”——不止一條記錄吧,給你U層返回一個實體,能實現此功能嗎?當然不能。
如何解決?
面對此問題,如何解決,你想過嗎?——你說,返回DataSet或DataTable不就得了嗎。你看,Out了吧….
偷偷告訴大家,還是返回實體,但是這次不是返回一個實體啦,是返回”一群“實體(實體集合)
具體是如何實現的,請關注下篇部落格!!