首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

Effective C# 原則 41:優先選擇 DataSet 而非自訂資料結構

     編輯:關於C#

DataSet 常因「XML 序列化跨平台困難」與「弱型別容器」被詬病,但若理解其優勢並規避缺點,它能解決多數常規資料問題,開發效率遠超手寫集合。

DataSet 內建豐富功能

  • 離線資料快取、多資料表關聯、約束驗證;
  • AcceptChanges/RejectChanges 事務支援、DiffGram 追蹤變更;
  • 多資料表合併、DataView 篩選排序、跨表導覽。

自訂集合的隱形成本:以 AddressList 為例

需求:支援資料繫結、事務(Esc 取消編輯)、欄位驗證(州碼兩字母)、錯誤提示、排序搜尋。

1. 資料繫結需實作 ITypedList

空集合時反射無法取得型別資訊,需實作 GetItemProperties 回傳 PropertyDescriptorCollection。

2. 事務支援需實作 IEditableObject、IDataErrorInfo

需自行管理永久/暫存資料雙緩衝、編輯狀態旗標、錯誤集合、BeginEdit/EndEdit/CancelEdit 邏輯,代碼量極大。

3. 繫結清單介面 IBindingList 至少 20 成員

支援排序、搜尋、新增/刪除通知等,實作極其繁瑣。

4. 參考類型交換失效

若屬性回傳參考類型,內部交換實例不會更新外部持有的舊參考(同原則 45 陷阱)。DataSet 以 Merge 原地更新解決此問題。

強型別 DataSet:兩全其美

VS 設計師可從資料庫結構生成繼承 DataSet 的強型別類別,提供:

  • 強型別存取:myDataSet.Orders[0].CustomerID;
  • 保留所有 DataSet 內建功能;
  • 弱型別 API 仍可用於動態場景。

結論

除非極少數「演算法導向、極致效能、輕量格式」場景,否則請使用(強型別)DataSet。它雖非 OO 純粹典範,但以極少代碼換取完整功能集,是務實的最佳選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved