jueves, 3 de abril de 2008

Conceptos de Linq, ORM Y Linq to Sql

Buenas Buenas!

Me gustaría comentarles algo que me sucedió en una de las charlas ( la primera charla a la que asistí) del grupo de desarrolladores BogotaDotNet.

Para los que han asistido a algún evento de este tipo recordaran las rifas y regalos del final del evento, y pues bueno ¡ahi comienzó mi historia!

El expositor de la charla inició con algunas preguntas en las que se trataron cosas acerca de Desktop Window Manager (DWM), User Account Control (UAC), las características del .net framework 3.5. Hasta ahi todo normal =). Pero llegó la pregunta por la que he escrito este post y es la siguiente: (literalmente)

--¿Alguno de ustedes me puede decir que es LINQ?

En ese momento levanté la mano y contesté orgullosamente

--Un ORM. Una tecnología que se encarga de evitar que tengamos que escribir mas código, ya sea para acceder a SqlServer, un Dataset, colecciones o lo que se quiera

Para lo que recibí un

--¡No! LINQ no es un ORM, el Entity Framework si es un ORM... Next.

Esto me dejó sorprendido y confundido, puesto que es muy común relacionar LINQ con ORM, lo que no está mal si hablamos de LINQ/SQL, no explícitamente de LINQ, y lo cual no entendí en ese momento; este tipo de nuevas tecnologías hace que sea muy fácil confundir a los desarrolladores nuevos, ya que la mayoría de documentación sobre LINQ está relacionada con LINQ/SQL, quizá porque es lo que más se usaría en entornos de desarrollos reales, (como todos sabemos, el 90% de nuestro trabajo tiene que ver o con una base de datos), o porque es lo mas novedoso del .net Framework 3.5.Cual sea la razón LINQ/SQL si funciona como un ORM común y silvestre.

Bueno, el propósito de la historia es dejar unos conceptos claros para que no surjan este tipo de confusiones, más que todo, en desarrolladores nuevos en este tipo de tecnologías. (Como Yo XD)

Bueno, pues primero que todo quisiera dejar claro que son ORM, LINQ, LINQ/SQL .Aclaro que está dicho a grandes rasgos.

ORM (Object-Relational mapping) [Mapeo de Objetos relacionales]
Es una técnica de programación en la cual, se mapean los objetos de una base de datos relacional (también orientadas a objetos si es necesario) en clases de algún lenguaje orientado a objetos, para ser usados como objetos, directamente en código y evitar el código sql
Mas Info en http://es.wikipedia.org/wiki/Mapeo_objeto-relacional

LINQ (Language Integrated Query) [Lenguaje de Consulta Integrado]
Como su nombre lo dice, es un LENGUAJE de consultas, que expone operadores de consulta, indiferente de sí se van a usar en SQL, DataSet, Colecciones, Xml o lo que se nos ocurra. En el caso específico de LINQ, este es un lenguaje embebido en Framework 3.5 y disponible para los lenguajes administrados de ultima generación como son C# 3.0, VB 9.0, Chrome, y próximamente en lenguajes como F#, Temerle
Más Info en http://www.msdn2.microsoft.com/en-us/netframework/aa904594.aspx

LINQ/SQL (LINQ to SQL) [LINQ a SQL]
Es una Implementación de LINQ, el cual permite usar el modelo ORM en SqlServer mediante LINQ, en pocas palabras nos permite generar un modelos de clases relacionales (si así se puede decir) en base al modelo entidad/relación de nuestra base de datos en este caso específico SqlServer
Mas Info http://www.weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

Sí se tienen claros estos conceptos dudo mucho que lleguen a confundirse.
En conclusión, no me gane el premio, pero me queda la satisfacción de haber corregido mi error.

Post Dedicado a la comunidad de desarrolladores BogotaDotNet.

Adelante muchachos hagamos de .net una plataforma bien usada y más que todo profesional.

2 comentarios:

Robinson Moscoso dijo...

Muchas gracias por tu articulo, muy bueno y muy oporto. y pues aprovecho para darte la bienvenida a la comunidad de Desarolladores BogotaDotNet, y esperamos verte mucho en los eventos, en la pagina y en todas las actividades de la comunidad.


Róbinson Moscoso
Director BogotaDotNet

Juan Carlos Ruiz Pacheco dijo...

Hola, he leído tu aporte y me parece muy bien que te intereses sobre el tema.

Y bien, si estabas equivocado. El ORM SI ES el entity framework, LINQ nace como una extensión a los lenguajes C# 3.0 y vb 9.0, dicha extensión al lenguaje le permite a un desarrollador interactuar con los datos con un único modelo de programación, como tu mismo lo acotas:

"LINQ (Language Integrated Query) [Lenguaje de Consulta Integrado]
Como su nombre lo dice, es un LENGUAJE de consultas, que expone operadores de consulta, indiferente de sí se van a usar en SQL, DataSet, Colecciones, Xml o lo que se nos ocurra."

Ahora bien fíjate que LINQ te brinda un modelo de programación unificado para acceder a los datos: A CUALQUIER ORIGEN DE DATOS.

Y mira la definición de ORM:

"ORM (Object-Relational mapping) [Mapeo de Objetos relacionales]
Es una técnica de programación en la cual, se mapean los objetos de una base de datos relacional"

ahí estan las palabra mágicas: Base de Datos.

Incluso la definición mas clara para un ORM desde el punto de vista de la funcionalidad de Entity framework, no es el ver las tablas y relaciones de la bd como objetos, sino que realmente te evita pensar en relaciones y tablas pues su objetivo es integrar un conjunto de relaciones, tablas y objetos de la base de datos en ENTIDADES que son representaciones consolidadas de lo que en la base de datos se puede ver como un conjunto de partes dispersas.