2011-05-06 96 views
7

在查詢數據庫並返回結果的可枚舉對象的數據訪問層中,返回說出帶有屬性名稱,年齡等的Dog對象列表的優點是什麼,而不是DataTable具有如「Name 「,」年齡「等?使用POCO比DataTables有什麼優勢?

+3

的事實POCO給你帶有屬性Name,Age等的Dog對象列表,而不是具有「Name」,「Age」等列的DataTable。 – 2011-05-06 16:08:46

回答

8

幾個:

  • 類型安全
  • 序列化不只是XML,但JSON,二進制...
  • 可讀性
  • 重量更輕
  • 能夠添加行爲
  • 定義DataAnnotation和驗證邏輯的能力
  • 能力使用ORMs
+0

當你提到序列化時,是否指的是某些.net自動序列化能力POCO,但它不知道如何序列化DataTables? – 2011-05-06 19:24:13

+0

那是對的。 Serializing poco是自動的,只需要使用正確的serialiser – Aliostad 2011-05-06 21:02:40

7

如果你使用一個普通的DataTable,你最終會得到魔法字符串到處(即使你使用常量)。提取這些值的代碼最終會變得笨拙並且容易出錯,這基本上是因爲您最終不得不提供數據(名稱,表達式等),您真的想要在其中表示代碼

你叫DataTable.SelectDataTable.Sort,或訪問DataRow索引任何時候,想象有多少絨毛少 - 少潛在的錯誤 - 如果你使用強類型的模型會有。當然,這可能是一個強類型的數據集,但即使如此,我發現與POCO的摩擦通常較小。

此外,POCO通常需要較少的絨毛測試代碼比數據表。

+0

聽起來像POCO是優越的。爲什麼會有人想要使用數據表?他們只是過去的遺物嗎? – 2016-06-28 01:45:13

+1

@TheMuffinMan:並不完全......如果你實際上不需要對數據做任何事情而不是在網格中顯示它,例如,使用'DataTable'更簡單。或者如果您使用動態形狀的查詢。如果你習慣了Json.NET,就像使用'JObject'而不是反序列化到一個特定的類。 – 2016-06-28 05:19:28

0

它將您的業務邏輯從持久層中分離出來。

因此,您的'Dog'對象以及大多數使用它的代碼可以關注Dogs和Doginess本身,而不用擔心本週數據訪問風格何時變得流行。

1

如果您使用對象而不是DataTables,則會得到強類型結果,並使得使用數據的代碼更加乾淨。您不必擁有各種字符串就可以訪問應該只是某個對象的屬性。

另外,如果你使用像NHibernate的ORM工具,你可以直接從數據庫到你的對象映射,無需手動調出該數據庫和處理SqlCommands等。

相關問題