Pregunta

Actualmente estoy diseñando una pequeña aplicación CRUD.Su base de datos es un gran desastre y cambiará con frecuencia en el transcurso de los próximos 6 meses a un año.¿Qué recomendarías para mi capa de datos?

1) ORM (si es así, ¿cuál?)

2) Linq2Sql

3) Procedimientos almacenados

4) Consultas parametrizadas

Realmente necesito una solución que sea lo suficientemente dinámica (tanto rápida como fácil) donde pueda reemplazar tablas y agregar/eliminar columnas con frecuencia.

Nota:No tengo mucha experiencia con ORM (solo un poco de SubSonic) y generalmente tiendo a usar procedimientos almacenados, así que tal vez ese sea el camino a seguir.Me encantaría aprender Ling2Sql o NHibernate si alguno de ellos permitiera la situación que describí anteriormente.

¿Fue útil?

Solución

Una cosa clave a tener en cuenta aquí es que si el esquema de la base de datos cambia con frecuencia, desea tener cierto nivel de seguridad de tipos en tiempo de compilación.Descubrí que esto es un problema con NHibernate porque usa archivos de mapeo xml, por lo que si cambia algo en el esquema de su base de datos, no sabrá hasta el tiempo de ejecución que el mapeo no funciona.

También será un problema con los procesos almacenados.

El uso de Linq2Sql le brindará la ventaja de saber dónde exactamente falla su código cuando cambia un esquema en el momento de la compilación.Para mí, esto es algo que tendría prioridad sobre todo lo demás si trabajo con un esquema que cambia con frecuencia.

Otros consejos

Yo miraría SubSonic con la configuración del proveedor de compilación (Proyecto de sitio web).Eso funciona muy bien porque regenera automáticamente los objetos DAL cada vez que construyes tu proyecto, por lo que si la base de datos cambia de una manera que rompe tu código, obtienes un error de compilación.

Funcionó bien hasta que el esquema de la base de datos se volvió realmente complejo y llegamos a los límites del patrón ActiveRecord, pero mientras el esquema no sea enormemente complejo, funciona bastante bien.Una vez que el esquema se estabilice, puede cambiar para que solo esté construyendo el DAL cuando lo desee.

Definitivamente quieres usar un ORM.Cualquier ORM está bien, pero desea algo que genere clases fuertemente tipadas.Cuando se agregan, modifican o eliminan campos de una tabla, desea poder regenerar esas clases y ocuparse de corregir errores de tiempo de compilación únicamente.Si utiliza un modelo dinámico, es probable que tenga muchos errores de tiempo de ejecución desagradables.¡Esto es muy importante!soy parte del Mi generación equipo de desarrollo en sourceforge, y creo que es una gran solución a su problema.Puedes generar dOOdads, NHibernate, EasyObjects, EntitySpaces, etc.Si desea optar por una solución más cara, opte por códigosmith o LLBLGen Pro.Buena suerte: cualquiera que esté interesado en utilizar MyGeneration, no dude en ponerse en contacto conmigo si tiene preguntas.

NHibernate, pero solo si estaría dispuesto a tener un enfoque de objeto primero en el que defina sus clases y luego defina la estructura de tabla deseada en los archivos de mapeo, y luego cree un esquema de base de datos utilizando las clases de generación de esquemas integradas de NHibernate.

Para hacerlo al revés (por ejemplo, tienes un montón de tablas y luego basas el diseño de tu objeto en eso), encontré Mi generación + NHibernate para funcionar, aunque no estoy muy contento con las clases resultantes (principalmente porque soy muy estricto con la verdadera programación orientada a objetos).

Si estuviera en tu lugar, intentaría aprovechar lo que sé (sprocs) con Linq2Sql.Linq2Sql aún puede usar tus sprocs pero luego tienes la ventaja adicional de poner una nueva herramienta en tu cinturón.Creo que entender la sintaxis y la metodología de Linq2XXX (X es una tecnología aleatoria, no un entretenimiento para adultos... lo cual no es una mala idea ahora que lo pienso) será una gran adición a tu conjunto de habilidades usando Linq sobre una colección de objetos es muy agradable.

Pero, en última instancia, algo como NHibernate le convendrá mejor a largo plazo.

EntitySpaces puede regenerar su DAL/capa empresarial en un minuto y sin pérdida de código; consulte la versión de prueba ==> AQUÍ

No es necesario registrarse, también se ejecuta en Visual Studio.

Utilice EntitySpaces.Me enviarás flores, garantizado.simplemente sorprendente.cambia la base de datos como quieras.Presiona el botón, ¡bang!Todos los cambios están hechos.sin cambiar su código personalizado.Me encanta.

¿Qué tan simple es la aplicación?Si tuviera que trabajar con esquemas/diseño durante un par de meses y no preocuparme realmente por una aplicación real...Consideraría usar EDM y un proyecto de aplicación web de entidades de datos dinámicos.En mi opinión, esto te permitirá seguir adelante con el menor esfuerzo.Esto lo mantiene concentrado en esquemas, datos y otras cosas interesantes.¡Espero no recibir demasiados golpes negativos con este!

Así es como se verá el cuadro de diálogo del nuevo proyecto este

Ya está satisfecho con los procesos almacenados y podrían ser suficientes para abstraer el esquema cambiante.Si los ORM no están contentos con los procesos almacenados, entonces tal vez funcionen con Vistas que usted mantiene actualizadas además del esquema cambiante.

Si el esquema de la base de datos cambia con frecuencia, prefiera Entity Framework a LINQ2SQL.Si el esquema cambia, usando L2S tienes que
1) Elimina y vuelve a agregar tu tabla (perdiendo tus personalizaciones)
2) Modifique el modelo a mano (como se hace aquí en stackoverflow)

EF es un superconjunto de L2S que le brinda más flexibilidad de uso e independencia de dbms.

Mire por qué está cambiando y vea si puede anticipar y generalizar los tipos de cambios que se le presenten para que no rompan su código.

un marco puede facilitar la adaptación de los cambios, pero un análisis más profundo tendrá un beneficio a largo plazo

Cualquier solución puede funcionar, lo que realmente necesita es un conjunto de pruebas que garanticen que las operaciones básicas como insertar, seleccionar, actualizar y eliminar funcionan.De esta manera, simplemente puede ejecutar sus pruebas y verificar si las asignaciones están actualizadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top