2011-05-06 53 views
7

En una capa de acceso a datos que consulta una base de datos y devuelve un objeto enumerable de resultados, ¿cuáles son las ventajas de devolver una lista de objetos Dog con propiedades Nombre, Edad, etc., en lugar de una DataTable con columnas como "Nombre "," Edad ", etc.¿Cuáles son las ventajas de utilizar POCO en DataTables?

+3

El hecho de que a Poco le da una lista de objetos Dog con propiedades Nombre, Edad, etc., en lugar de una DataTable que tiene columnas como "Nombre", "Edad", etc. –

Respuesta

8

algunos:

  • seguridad Tipo
  • serialización no sólo a XML pero JSON, binario ...
  • legibilidad
  • Más ligero
  • posibilidad de añadir comportamientos
  • Posibilidad de definir DataAnnotation y la lógica de validación
  • Habilidad para usar ORMs
+0

cuando menciona la serialización, ¿se refiere a alguna capacidad automática de .net para serializar? POCO, ¿pero no sabe cómo serializar DataTables? –

+0

Eso es correcto. Serializar poco es automático, solo necesita usar el serializador correcto – Aliostad

7

Si usa una DataTable simple, termina con cadenas mágicas en todas partes (incluso si usa constantes). El código para extraer los valores termina siendo torpe y propenso a errores, básicamente porque terminan teniendo que suministrar datos (nombres, expresiones, etc.) donde realmente está tratando de expresar el código .

Cada vez que se llama a DataTable.Select o DataTable.Sort, o acceder al indexador DataRow, imaginemos cuánto menos pelusa - y menos posibilidades de error - que habría si estuviera utilizando un modelo inflexible de tipos. Esto podría ser un conjunto de datos fuertemente tipado, por supuesto, pero incluso entonces encuentro que generalmente hay menos fricción con las POCO.

Además, las POCO generalmente requieren menos pelusa que el código de prueba que DataTables.

+0

Parece que los POCO son superiores. ¿Por qué uno querría usar tablas de datos? ¿Son solo una reliquia del pasado? –

+1

@TheMuffinMan: No del todo ... si en realidad no necesitas hacer nada con los datos aparte de mostrarlo en una grilla, por ejemplo, es más simple usar un 'DataTable'. O si está utilizando consultas con una forma dinámica. Si estás acostumbrado a Json.NET, es como usar 'JObject' en lugar de deserializar a una clase específica. –

0

Separa la lógica de su negocio de las capas de persistencia.

Así que su objeto "Perro", y la mayor parte del código que lo usa, solo puede preocuparse por Perros y Perversidad, y no se preocupe por cuál sabor de acceso a datos está de moda esta semana.

1

Si utiliza objetos en lugar de DataTables, obtiene resultados fuertemente tipados y hace que el código con los datos sea mucho más limpio. No tendrá que tener todo tipo de cadenas para acceder a lo que debería ser una propiedad de un objeto.

Además, si se utiliza una herramienta ORM como NHibernate, puede asignar desde la base de datos directamente a los objetos sin tener que llamar manualmente a la base de datos y hacer frente a SqlCommands, etc ..

Cuestiones relacionadas