Questa è una domanda un po 'aperta ma volevo alcune opinioni, poiché sono cresciuto in un mondo in cui gli script SQL in linea erano la norma, quindi eravamo tutti molto consapevoli dei problemi basati sull'iniezione SQL e di quanto fosse fragile la sql quando facendo manipolazioni di stringhe dappertutto.
Poi è arrivata l'alba dell'ORM in cui stavi spiegando la query all'ORM e facendogli generare il proprio SQL, che in molti casi non era ottimale ma era sicuro e facile. Un'altra cosa positiva degli ORM o dei livelli di astrazione del database è che l'SQL è stato generato pensando al suo motore di database, quindi ho potuto usare Hibernate / Nhibernate con MSSQL, MYSQL e il mio codice non è mai cambiato, era solo un dettaglio di configurazione.
Ora avanziamo rapidamente ai giorni nostri, dove i Micro ORM sembrano conquistare più sviluppatori e mi chiedevo perché apparentemente abbiamo fatto un'inversione di marcia sull'intero argomento sql in linea.
Devo ammettere che mi piace l'idea di nessun file di configurazione ORM e di essere in grado di scrivere la mia query in un modo più ottimale, ma mi sento come se stessi riaprendo le vecchie vulnerabilità come SQL injection e mi sto anche legando a un motore di database, quindi se voglio che il mio software supporti più motori di database, dovrei fare un po 'di hacking di stringhe che sembra quindi 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 microorganismi che offrono protezione nella maggior parte dei casi dall'iniezione sql)
Quindi quali sono le opinioni delle persone su questo genere di cose? Sto usando Dapper come Micro ORM in questo caso e NHibernate come ORM normale in questo scenario, tuttavia la maggior parte in ciascun campo sono abbastanza simili.
Quello che io chiamo inline sqlsono stringhe SQL nel codice sorgente. Ci sono stati dibattiti di progettazione sulle stringhe SQL nel codice sorgente che toglie l'intento fondamentale della logica, motivo per cui le query in stile linq tipicamente statiche sono diventate così popolari nella sua ancora solo 1 lingua, ma con diciamo C # e Sql in una pagina che hai 2 lingue mescolate nel tuo codice sorgente grezzo ora. Giusto per chiarire, l'iniezione SQL è solo uno dei problemi noti con l'utilizzo di stringhe sql, ho già detto che puoi impedire che ciò accada con query basate su parametri, tuttavia evidenzio altri problemi con le query SQL radicate nel codice sorgente, come la mancanza di astrazione di DB Vendor e la perdita di qualsiasi livello di errore di compilazione durante l'acquisizione di query basate su stringhe, sono tutti problemi che siamo riusciti a far fronte agli albori degli ORM con la loro funzionalità di query di livello superiore,
Quindi sono meno focalizzato sui singoli problemi evidenziati e più il quadro più ampio è ora che diventa più accettabile avere nuovamente stringhe SQL direttamente nel codice sorgente, poiché la maggior parte dei Micro ORM utilizza questo meccanismo.
Ecco una domanda simile che ha alcuni punti di vista diversi, anche se riguarda di più il sql inline senza il contesto micro orm: