Esta é uma pergunta aberta, mas eu queria algumas opiniões, pois cresci em um mundo onde os scripts SQL embutidos eram a norma, e todos nos conscientizamos dos problemas baseados em injeção SQL e da fragilidade do sql quando fazendo manipulações de cordas em todo o lugar.
Chegou então o início do ORM, onde você estava explicando a consulta ao ORM e permitindo que ele gerasse seu próprio SQL, que em muitos casos não era o ideal, mas era seguro e fácil. Outra coisa boa sobre os ORMs ou as camadas de abstração de banco de dados foi que o SQL foi gerado com o mecanismo de banco de dados em mente, para que eu pudesse usar o Hibernate / Nhibernate com MSSQL, MYSQL e meu código nunca mudou, era apenas um detalhe de configuração.
Agora, avançando rapidamente para o dia atual, em que os micro ORMs parecem estar conquistando mais desenvolvedores, fiquei pensando por que aparentemente fizemos uma inversão de marcha em todo o assunto sql em linha.
Devo admitir que gosto da ideia de não haver arquivos de configuração do ORM e poder escrever minha consulta de maneira mais otimizada, mas parece que estou me abrindo de volta para as vulnerabilidades antigas, como a injeção de SQL, e também estou me comprometendo a um mecanismo de banco de dados, portanto, se eu quiser que meu software ofereça suporte a vários mecanismos de banco de dados, precisarei fazer mais algumas invasões de strings, que parecem começar a tornar o código ilegível e mais frágil. (Pouco antes de alguém mencionar, eu sei que você pode usar argumentos baseados em parâmetros com a maioria das micro orms, que oferece proteção na maioria dos casos contra injeção de sql)
Então, quais são as opiniões das pessoas sobre esse tipo de coisa? Estou usando o Dapper como meu Micro ORM nesta instância e o NHibernate como meu ORM comum nesse cenário, porém a maioria em cada campo é bastante semelhante.
O que chamo de sql embutidosão seqüências de caracteres SQL no código-fonte. Costumava haver debates sobre o design de strings SQL no código-fonte, prejudicando a intenção fundamental da lógica, e é por isso que as consultas no estilo linq com estaticamente se tornaram tão populares ainda em apenas 1 idioma, mas digamos C # e Sql em uma página que você possui. 2 idiomas misturados no seu código-fonte bruto agora. Apenas para esclarecer, a injeção de SQL é apenas um dos problemas conhecidos com o uso de seqüências de caracteres sql. Já mencionei que você pode impedir que isso aconteça com consultas baseadas em parâmetros, no entanto, destaco outros problemas com a consulta de SQL no seu código-fonte, como a falta de abstração do DB Vendor e a perda de qualquer nível de captura de erros em tempo de compilação em consultas baseadas em strings, todos esses problemas foram resolvidos com o surgimento dos ORMs com sua funcionalidade de consulta de nível superior,
Portanto, estou menos focado nas questões individuais destacadas e, quanto mais amplo, agora é mais aceitável ter seqüências SQL diretamente no seu código-fonte novamente, pois a maioria dos Micro ORMs usa esse mecanismo.
Aqui está uma pergunta semelhante que tem alguns pontos de vista diferentes, embora seja mais sobre o sql inline sem o contexto de micro orm: