Su principio guía debe ser No se repita :
En ingeniería de software, Don't Repeat Yourself (DRY) es un principio de desarrollo de software destinado a reducir la repetición de información de todo tipo, especialmente útil en arquitecturas de varios niveles. El principio DRY se establece como "Todo conocimiento debe tener una representación autoritaria única e inequívoca dentro de un sistema".
El ORM es esencialmente una capa adicional (o nivel si lo prefiere), que se encuentra cómodamente entre su aplicación y su (s) almacenamiento (s) de datos. Sus restricciones deben estar en un solo lugar, y solo en un lugar, ya sea el ORM o el almacenamiento de datos, de lo contrario, pronto mantendrá diferentes versiones de ellos. realmente no quieres hacer eso.
Sin embargo, en la práctica, la mayoría de los ORM medio decentes generan automáticamente una gran cantidad de sus modelos a partir de su esquema de datos. Aunque todavía hay duplicación, las posibilidades de mantenimiento son mínimas ya que el código ORM duplicado se genera siguiendo el mismo patrón cada vez. Sería ideal no tener código duplicado, pero las restricciones generadas automáticamente son la mejor opción.
Además, tener sus restricciones en un lugar no significa que necesariamente significa que debe tener todas sus restricciones en el mismo lugar. Algunas, como las restricciones de integridad referencial, pueden ser más adecuadas para el almacenamiento de datos (pero pueden perderse si se muda a otro almacenamiento de datos), y algunas, principalmente aquellas que tienen que ver con lógica de negocios compleja, son más adecuadas para su ORM. Sería preferible tener todas tus manzanas en la misma canasta, pero ...
Failures
Mencionas que el ORM está fallando. Eso es absolutamente irrelevante para su pregunta, su aplicación debe pensar en el ORM y en el almacenamiento de datos como una entidad única. Si falla, falla, omitir el ORM para comunicarse directamente con el almacenamiento de datos es no una buena idea.
Omisión del ORM para cualquier otra cosa
Tampoco es una buena idea. Sin embargo, puede suceder por una variedad de razones:
-
Partes heredadas de la aplicación que se compilaron antes de la introducción del ORM.
Es una situación difícil, y exactamente la situación con la que estoy lidiando con ahora mismo , por lo tanto, repito constantemente el "infierno de mantenimiento". O mantienes el mantenimiento de las partes que no son ORM o las reescribes para usar el ORM. La segunda opción podría tener más sentido inicialmente, pero es una decisión que se basa únicamente en lo que hacen exactamente esas partes de su aplicación y en lo valioso que sería una reescritura completa a largo plazo.
Intenta cambiar una clave en una tabla MySQL de 2 * 10 ^ 8 filas mal diseñada (sin tiempo de inactividad) y entenderás de dónde vengo.
-
Partes no heredadas de la aplicación que necesitan hablar directamente con el almacenamiento de datos:
Aún más complicado. Los ORM son herramientas sofisticadas, y se ocupan de casi todo, pero a veces se interponen o incluso son absolutamente inútiles. La palabra de moda (buzzphrase realmente) es discrepancia de impedancia entre el objeto y la relación , simplemente no es técnicamente posible para su ORM todo lo hace su base de datos relacional, y para algunas de las cosas que hacen, hay una importante penalización en el rendimiento.
Comentarios
Desde el punto de integridad de los datos, las restricciones DEBEN estar en la base de datos, y DEBERÍAN estar en la aplicación. ¿Qué sucede si se accede a su aplicación desde una web y desde una aplicación de escritorio, una aplicación móvil o un servicio web? - Luiz Damim
Aquí es donde agregar una capa adicional sería extremadamente útil, y si estamos hablando de una aplicación web, iría con una API REST. Un diseño demasiado simplista para esto sería:
El ORM se ubicaría entre la API y los almacenamientos de datos, y todo lo que se encuentra detrás de la API (incluida esta) se consideraría una entidad única de las distintas aplicaciones.