2011-05-06 99 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等。

相关问题