Migración de ORM personalizado de .NET a Entity Frame / Dapper

asp.net-web-api c# dapper migration mysql

Pregunta

Heredé un proyecto de escala masiva y un poco de laberinto. El tráfico es lo suficientemente importante como para querer optimizar el acceso a los datos, por lo que he comenzado a convertir algunos servicios WCF que javascript llama a la API web.

Desafortunadamente, las claves principales de la base de datos (no el incremento automático) también son administradas por un ORM personalizado al consultar una función de MySQL que devuelve el siguiente conjunto de ID que se utilizará. El ORM luego los almacena en la memoria caché y los sirve hasta la aplicación. La base de datos en sí misma es un crecimiento continuo de 2 TB de datos, lo que haría que el tiempo de inactividad sea significativo.

Había planeado usar Dapper porque he disfrutado de la facilidad / rendimiento en el pasado, pero quitar esta base de datos de este ORM personalizado parece desalentador y propenso a errores.

Preguntas:

  • ¿Alguien tiene algún consejo para abordar un proyecto a gran escala?
  • ¿Debo enfocarme más en migrar la base de datos a una estructura de datos completamente nueva? (¡también necesita una normalización significativa!)

Respuesta aceptada

Mi humilde opinión :

Una regla empírica cuando trabajas con el código heredado es: si algo funciona, mantenlo de esa manera. Si es necesario, realice un cambio o una mejora . Las principales razones son:

  • El efecto del rediseño es casi cero cuando desea agregar un valor comercial al sistema.
  • El sistema, bueno o malo, funciona. No importa el cuidado que tenga, siempre puede desordenar algo con un cambio estructural.

Además, depende mucho del plan de la compañía las razones para cambiar (agregar una función, corregir un error, mejorar el diseño u optimizar el uso de los recursos). Mi humilde experiencia me dice que el tiempo y el presupuesto son muy importantes, y aunque siempre queremos rediseñar (o, en algunos casos, codificar desde cero), lo más importante son los objetivos comerciales y el valor agregado.

En su caso, tal vez no sea necesario cambiar todo el ORM. Si dice que los ID están en caché, un mejor enfoque sería modificar los PK, añadiéndoles la propiedad de identidad (con el valor inicial apropiado en cada tabla). Después de eso, puede eliminar esa parte concreta del código que obtiene el siguiente Id.

En algunos casos, una base de datos no normalizada tiene sus razones. He visto casos en los que los datos se copian en las tablas para evitar la unión, lo que afecta el rendimiento. Estoy hablando de millones de discos ...

Razones para cambiar el ORM: tal vez si es ineficiente, o si no cierra el código no administrado (en este caso, un mejor enfoque es implementar la interfaz IDisposable). Si funciona, tal vez un mejor enfoque sea usar un nuevo ORM una vez que necesite crear nuevas funcionalidades. Si el proyecto necesita una refactorización para fines de optimización, el cambio debe aplicarse en los cuellos de botella, no en todo el código.

Hay mucha discusión sobre el tema. Un buen recurso recomendado es "Trabajar eficazmente con código heredado" de Michael Feathers, o "Comenzar con DDD cuando está rodeado de sistemas heredados" por Eric Evans.

¡Saludos!



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué