Esta es una pregunta un poco abierta, pero quería algunas opiniones, ya que crecí en un mundo donde los scripts SQL en línea eran la norma, entonces todos nos hicimos muy conscientes de los problemas basados en la inyección SQL y cuán frágil era el sql cuando haciendo manipulaciones de cuerdas por todo el lugar.
Luego llegó el amanecer del ORM donde explicaba la consulta al ORM y le permitía generar su propio SQL, que en muchos casos no era óptimo pero era seguro y fácil. Otra cosa buena acerca de los ORM o las capas de abstracción de la base de datos fue que el SQL se generó teniendo en cuenta su motor de base de datos, por lo que pude usar Hibernate / Nhibernate con MSSQL, MYSQL y mi código nunca cambió, fue solo un detalle de configuración.
Ahora avanzando rápidamente hasta el día actual, donde Micro ORM parece estar ganando a más desarrolladores. Me preguntaba por qué aparentemente hemos dado un giro en U en todo el tema sql en línea.
Debo admitir que me gusta la idea de que no haya archivos de configuración ORM y poder escribir mi consulta de una manera más óptima, pero parece que me estoy abriendo nuevamente a las viejas vulnerabilidades como la inyección de SQL y también me estoy atando a un motor de base de datos, por lo que si quiero que mi software sea compatible con múltiples motores de base de datos, necesitaría hacer un poco más de piratería de cadenas que parece comenzar a hacer que el código sea ilegible y más frágil. (Justo antes de que alguien lo mencione, sé que puede usar argumentos basados en parámetros con la mayoría de los micro orms que ofrecen protección en la mayoría de los casos contra la inyección sql)
Entonces, ¿cuáles son las opiniones de la gente sobre este tipo de cosas? Estoy usando Dapper como mi Micro ORM en este caso y NHibernate como mi ORM normal en este escenario, sin embargo, la mayoría en cada campo son bastante similares.
Lo que llamo sql en líneason cadenas SQL dentro del código fuente. Solía haber debates de diseño sobre las cadenas SQL en el código fuente que restan valor a la intención fundamental de la lógica, razón por la cual las consultas de estilo linq escritas estáticamente se hicieron tan populares que todavía es solo 1 lenguaje, pero digamos C # y Sql en una página que tiene 2 idiomas entremezclados en su código fuente sin procesar ahora. Solo para aclarar, la inyección SQL es solo uno de los problemas conocidos con el uso de cadenas sql, ya menciono que puede evitar que esto suceda con consultas basadas en parámetros, sin embargo, destaco otros problemas con tener consultas SQL integradas en su código fuente, como la falta de abstracción de DB Vendor, así como la pérdida de cualquier nivel de captura de errores en el tiempo de compilación en consultas basadas en cadenas, todos estos son problemas que hemos logrado evitar con el inicio de los ORM con su funcionalidad de consulta de nivel superior,
Por lo tanto, estoy menos enfocado en los problemas individuales resaltados y más la idea general es que ahora es más aceptable tener cadenas SQL directamente en su código fuente nuevamente, ya que la mayoría de los Micro ORM usan este mecanismo.
Aquí hay una pregunta similar que tiene algunos puntos de vista diferentes, aunque trata más sobre el sql en línea sin el contexto de micro orm: