2008-10-27 38 views
7

Acabo de empezar a crear mi capa de acceso a datos utilizando LinqToSql. Todo el mundo está hablando de la sintaxis genial y realmente me gusta Linq en general.Mejores prácticas de LinqToSql

Pero cuando vi cómo se generan sus clases si arrastra algunas tablas en el LinqContext, me sorprendió: ¡Tanta clave que nadie necesitaría!

Así que miré cómo otras personas usaban LinqToSql, por ejemplo Rob Connery en su StoreFront Demo.

Como no me gusta la forma en que se genera todo este código, creé mi capa de dominio a mano y usé las clases generadas como referencia. Con esa solución estoy bien, ya que puedo usar las funciones proporcionadas por Linq (ejecución diferida, carga diferida, ...) y mi capa de dominio es bastante fácil de entender.

¿Cómo está utilizando LinqToSql?

Respuesta

6

Las clases creadas no son tan pesadas como parece. Por supuesto, se necesitan bastantes líneas de código, pero en general es tan liviano como puede ser para las características que proporciona.

Yo solía crear mis propias tablas, también, pero ahora solo uso LINQtoSQL DataContext. ¿Por qué? Crear es más simple, las funciones son mejores, la interoperabilidad funciona, es probablemente incluso más rápido que mis propios recursos (no en todos los aspectos. Por lo general, mis propias cosas eran extremadamente rápidas en una cosa, pero las genéricas eran más rápidas en todo lo demás).
Pero la parte más importante: es más fácil incorporar nuevos desarrolladores en las cosas LINQ que en las mías. Hay tutoriales, códigos de ejemplo, documentación, todo, que yo mismo tendría que crear para mi código. Lo mismo con usar mis cosas con otras tecnologías, como WCF o enlace de datos. Hay muchas trampas que atender.

Aprendí a no arrinconarme por las malas, parece rápido y fácil al principio, es mucho más divertido que aprender a usar las libs, pero es un verdadero dolor en el después de algunos meses en el camino, generalmente incluso para mí.

Después de un tiempo la novedad de crear mis propios contenedores de datos desaparece, y noté el dolor relacionado con la adición de una función. Una característica que hubiera tenido de forma gratuita, si hubiera utilizado las clases proporcionadas.
Lo siguiente que tuve que explicar mi código a algún otro programador. Si hubiera utilizado las clases proporcionadas, podría haberle señalado a algún sitio web para aprender sobre el tema. Pero para mis clases, tuve que entrenarlo él mismo, lo que demoró mucho tiempo y dificultó el ingreso de gente nueva a un proyecto.

0

Usar consultas compiladas. De lo contrario, Linq to SQL es dog slow. Really.

+0

Estoy realmente interesado porque esto ha sido downvoted. Usamos Linq-to-SQL en producción y tuvimos que reescribir la mayoría de las consultas para las compiladas y obtuvimos un aumento de rendimiento de 10x. – bh213

0

Utilizamos nuestro modelo de dominio manual, junto con las clases generadas, además de una utilidad simple que utiliza la reflexión para convertir entre ellos cuando sea necesario. Hemos contemplado la posibilidad de escribir un generador de convertidores si llegamos a un punto en el que la reflexión crea un cuello de botella de rendimiento.

+0

Consideré esto también, pero fui por la ruta que mencionó Jeff Fritz. ¡No se necesita reflexión! – Vyrotek

4

LinqToSql genera un conjunto de clases parciales para sus tablas. Puede agregar definiciones de interfaz a la "otra mitad" de estas clases parciales que implementan su modelo de dominio.

Luego, si usa el patrón de repositorio para ajustar el acceso a las consultas de Linq, para que devuelvan las implementaciones de interfaz de sus objetos (los objetos Linq subyacentes), LinqToSql se vuelve bastante flexible.

+0

Iba a publicar exactamente esto. Es bueno escuchar a otros usarlo de esta manera. – Vyrotek

+0

Mi equipo usa una técnica similar con conjuntos de datos fuertemente tipados, agregando implementaciones de interfaz a las clases parciales generadas por Vs.Net –

+0

¿Hay algún ejemplo de código sobre esto? Básicamente, escribí mi dominio usando el modelo de inyección de dependencia para simular el db. Ahora estoy haciendo mi base de datos LINQ to SQL y estoy luchando por encontrar la manera de mapear eficazmente mi objeto comercial x con mi objeto linq x sin una conversión coja – qui

1

Puede escribir a mano sus propias clases y utilizar los atributos LINQ to SQL para declarar las asignaciones o un archivo XML externo.

Si desea seguir con el diseñador existente y simplemente modificar el proceso de generación de código, tome mi templates that let you tailor the generated code.