使用POCO而不是DataTables有什么好处?

在数据访问层中,查询数据库并返回结果的可枚举对象,返回具有属性Name,Age等的Dog对象列表,而不是具有“Name”之类的列的DataTable,有什么好处, “年龄”等?

一些:

  • 类型安全
  • 序列化不仅仅是XML而是JSON,二进制……
  • 可读性
  • 更轻盈
  • 能够添加行为
  • 能够定义DataAnnotation和validation逻辑
  • 能够使用ORM

如果你使用普通的DataTable,你最终会得到魔术字符串(即使你使用常量)。 提取值的代码最终变得笨拙且容易出错,主要是因为您最终必须提供数据 (名称,表达式等),而您实际上是在尝试表达代码

每当你调用DataTable.SelectDataTable.Sort ,或者访问DataRow索引器时,想象一下如果你使用的是强类型模型,那么会减少多少绒毛 – 而且错误的可能性会降低。 当然,这可能是一个强类型的数据集,但即便如此,我发现与POCO的摩擦力通常较小。

此外,POCO通常比DataTables需要更少的绒毛来测试代码。

如果您使用对象而不是DataTables,您将获得强类型结果,并使使用数据的代码更加清晰。 您不必拥有所有类型的字符串来访问应该只是对象上的属性。

此外,如果您使用像NHibernate这样的ORM工具,您可以直接从数据库映射到您的对象,而无需手动调用数据库并处理SqlCommands等。

它将您的业务逻辑与持久层分开。

所以你的’Dog’对象,以及使用它的大部分代码,都可以关注Dogs和Doginess,而不用担心本周哪种数据访问风格很流行。