6

Estoy en las primeras etapas de planificación de una conversión de una aplicación de base de datos clásica grande ASP a ASP.Net y tengo problemas para seleccionar qué método de acceso a datos utilizar. He jugado con Linq To SQL, datos dinámicos, datasets fuertemente tipados, Enterprise Library (bloques de aplicaciones de acceso a datos) y un poco con Entity Framework, pero ninguno de ellos me ha saltado como "el único". Hay demasiadas opciones: mi cabeza está nadando, ¡ayúdame a elegir!Necesito consejos sobre cómo seleccionar un método de acceso a datos

Quizás ayudaría a dar algunos antecedentes sobre la aplicación que estoy convirtiendo, junto con las prioridades ...

  • La parte final es Microsoft SQL Server (2005 o posterior) y tenemos el compromiso de eso, así que no tengo que preocuparme por apoyar una plataforma de base de datos diferente.

  • La base de datos es muy madura y contiene una gran parte de la lógica de negocios. Está altamente normalizado y hace un uso extensivo de procedimientos almacenados, disparadores y vistas. Preferiría no reinventar dos ruedas al mismo tiempo, por lo que me gustaría hacer el menor número posible de cambios en la base de datos. Por lo tanto, tengo que elegir un método de acceso a datos que sea lo suficientemente flexible como para permitirme solucionar cualquier peculiaridad de la base de datos.

  • La aplicación tiene muchos formularios de entrada de datos y amplias capacidades de búsqueda e informes (los informes son otra bestia que abordaré más adelante).

  • La aplicación debe ser lo suficientemente flexible como para hacer frente a pequeños cambios en la estructura de la base de datos. La aplicación (y la base de datos) pueden instalarse en diferentes sitios donde se realizan pequeñas modificaciones personalizadas a la base de datos. Idealmente, la aplicación podría identificar las extensiones de la base de datos y reaccionar de forma adecuada. En otras palabras, si necesito almacenar una asignación O/R en la aplicación, necesito poder cambiarla (o actualizarla fácilmente) al instalar la aplicación y la base de datos en un nuevo sitio.

  • El desarrollo rápido de aplicaciones es crítico. Dado que la base de datos ya está hecha y la interfaz de usuario va a coincidir estrechamente con la aplicación existente, espero encontrar algo donde podamos poner esto en marcha con bastante rapidez. Estoy dispuesto a sacrificar no usar la tecnología más reciente y mejor si ahorra tiempo en el desarrollo. En otras palabras, si hay una curva de aprendizaje pronunciada para usar algo como Entity Framework, estoy de acuerdo con algo así como Datasets fuertemente tipados y un DAL personalizado si acelera el proceso.

  • Soy totalmente novato en ASP.Net pero estoy muy familiarizado con Classic ASP, T-SQL y el antiguo ADO (por ejemplo, los conjuntos de registros desconectados). Si alguno de los métodos de acceso a datos es más adecuado para alguien que proviene de mi entorno, podría inclinarme en esa dirección.

¡Gracias por cualquier consejo que pueda ofrecer!

Respuesta

1

nHibernar podría ser una buena opción. Puede almacenar la asignación en archivos de configuración externos que resolverían sus necesidades. Otra opción podría ser usar ActiveRecord, que se basa en nHibernate.

nHibernate tiene una función ordenada que puede ser útil. Se llama una propiedad dinámica, que básicamente es una colección de pares de valores de nombres poblada al extraer los nombres de las columnas del archivo de mapeo. Por lo tanto, cuando agrega una columna en su sitio de cliente, actualiza el archivo de asignación y podrá acceder a los datos a través de una colección en el objeto.

+0

Con tantas maneras de hacer lo mismo, me gustaría ver para qué sirve 1 herramienta frente a otras (es decir, cuándo usarla). junto con la evaluación de herramientas en algunos parámetros (p. ej., curva de aprendizaje, mantenimiento, simplicidad, soporte de la comunidad, etc.) – shahkalpesh

+0

He oído que nHibernate es muy potente, pero también he leído que la curva de aprendizaje es bastante pronunciada para usarla manera correcta. Lamentablemente, no tenemos ese tipo de tiempo. – CowherPower

+0

¿cuánto tiempo tienes? Me tomó un par de días descubrir cómo mapear mi primer objeto gráfico 3 como máximo. Soy un desarrollador de 1, parece que tienes un equipo. – JoshBerke

5

mirada a los tres artículos de esta serie:

High Performance Data Access Layer Architecture Part 1

Gran consejo.

+0

Gracias, esa fue una serie de artículos muy interesantes. Si decido construir mi propio DAL desde cero, puedo usar este método. Pero tendré que convertirlo a VB ya que realmente no conozco C# muy bien. – CowherPower

+0

La mayor parte se convertirá fácilmente, especialmente si usa una herramienta como Reflector para desmontar los binarios en VB.Net. Además, recuerde, en su solución, incluso si su capa de presentación es vb.net, su capa DAL, DTO y comercial puede ser C# si desea ir en esa dirección. –

+0

También encontré este sitio genial que convertirá C# a VB.net para usted. Parece funcionar bastante bien: http://www.developerfusion.com/tools/convert/csharp-to-vb/ – CowherPower

2

Puede desear desvincular la capa de la base de datos de la capa asp para que no solo pueda dar más flexibilidad al tomar la decisión, sino que cuando tenga que realizar cambios en la base de datos del cliente puede cambiar una nueva dll sin cambiar nada más.

Al usar la inyección de dependencia puede usar xml para indicarle a la estructura qué clase concreta usar para una interfaz.

La ventaja de hacer esto es que puede ir con un enfoque de base de datos, y si luego decide cambiar a otro, entonces puede simplemente cambiar el dll y continuar sin realizar ningún cambio en otras capas.

Dado que está más familiarizado con él, ¿por qué no ir directamente a la base de datos en este momento haciendo sus propias conexiones? Luego puede mover el resto de su código y, a lo largo del camino, puede decidir cuál de las innumerables tecnologías usará.

Para una nueva aplicación en la que estoy trabajando Estoy comenzando con LINQ to SQL para ello, principalmente porque el desarrollo será más rápido, pero, más adelante, si decido que no satisfará mis necesidades, simplemente lo cambiaré.

+0

Cuando dices "¿por qué no vas directamente a la base de datos?", ¿Estás hablando de usar cosas como SQLDataSource y conjuntos de datos directamente? No me opongo a eso, pero no quiero seguir ese camino si las nuevas tecnologías no han dejado obsoleto el método "directo" (o una opción tonta). – CowherPower

+1

Puede encontrar esta url interesante para el rendimiento: http://toomanylayers.blogspot.com/2009/01/entity-framework-and-linq-to-sql.html Un DataReader sería una opción útil, quizás. No creo que la ruta directa sea obsoleta, y si acelera su desarrollo, para mantenerla, más adelante, es posible que desee cambiarla. –

+1

Artículo interesante. Ya me estaba inclinando en contra del uso de Entity Framework y esto prácticamente sella esa decisión. – CowherPower

Cuestiones relacionadas