Questa è una domanda a risposta aperta, ma volevo delle opinioni, essendo cresciuto in un mondo in cui gli script SQL inline erano la norma, quindi eravamo tutti molto consapevoli dei problemi di SQL injection e della loro fragilità sql era quando facevo manipolazioni di stringhe dappertutto.
Poi è arrivata l'alba dell'ORM in cui stavi spiegando la query all'ORM e permettendogli di generare il suo SQL, che in molti casi non era ottimale ma era sicuro e facile. Un altro aspetto positivo degli ORM o dei livelli di astrazione del database era che l'SQL era stato creato tenendo presente il suo motore di database, quindi potevo usare Hibernate / Nhibernate con MSSQL, MYSQL e il mio codice non era mai cambiato era solo un dettaglio di configurazione.
Ora procediamo velocemente al giorno corrente, dove i Micro ORM sembrano conquistare più sviluppatori mi chiedevo perché abbiamo apparentemente fatto un'inversione a U sull'intero argomento sql in linea.
Devo ammettere che mi piace l'idea di non avere file di configurazione ORM e di poter scrivere la mia query in modo più ottimale, ma mi sembra di tornare alle vecchie vulnerabilità come SQL injection e sono anche io legarmi ad un unico motore di database, quindi se voglio che il mio software supporti più motori di database, dovrei fare un po 'di hackeraggio delle stringhe che sembra iniziare a rendere il codice illeggibile e più fragile. (Poco prima che qualcuno lo menzioni, so che è possibile utilizzare argomenti basati su parametri con la maggior parte dei micro orms che offre protezione nella maggior parte dei casi da SQL injection)
Quindi quali sono le opinioni delle persone su questo genere di cose? Sto usando Dapper come il mio Micro ORM in questa istanza e NHibernate come il mio normale ORM in questo scenario, tuttavia la maggior parte in ogni campo è abbastanza simile.
Quello che definisco inline sql è stringhe SQL all'interno del codice sorgente. Ci sono stati dibattiti di progettazione su stringhe SQL nel codice sorgente che hanno sminuito l'intento fondamentale della logica, motivo per cui le query di stile linq tipizzate in modo statico sono diventate così popolari la sua ancora solo 1 lingua, ma con diciamo C # e Sql in una sola pagina 2 lingue mescolate nel tuo codice sorgente non elaborato ora. Giusto per chiarire, l'iniezione SQL è solo uno dei problemi noti con l'uso di stringhe sql, ho già detto che è possibile impedire che questo accada con query basate su parametri, tuttavia evidenzi altri problemi relativi all'invio di query SQL nel codice sorgente, come la mancanza dell'astrazione di DB Vendor e la perdita di qualsiasi livello di errore in fase di compilazione durante l'acquisizione di query basate su stringhe, sono tutti problemi che siamo riusciti ad affrontare con l'alba degli ORM con le loro funzionalità di query di livello superiore, come HQL o LINQ ecc. (non tutti i problemi ma la maggior parte di essi).
Quindi sono meno focalizzato sui singoli problemi evidenziati e più l'immagine più grande di è ora più accettabile avere stringhe SQL direttamente nel codice sorgente di nuovo, come la maggior parte dei Micro ORM usano questo meccanismo.
Ecco una domanda simile che ha alcuni punti di vista diversi, sebbene si tratti più della sql in linea senza il contesto micro o mmm: