Per quanto mi riguarda, l'unica ragione legittima che ho sentito per l'uso della mappatura relazionale degli oggetti (ORM) è se è probabile un passaggio a un motore di database diverso (non solo possibile). Da MySQL a Oracle sarebbe un esempio (anche se non so perché qualcuno desidererebbe apportare quel particolare cambiamento a meno che non sia assolutamente necessario). E anche in questo caso un ORM potrebbe non essere la decisione migliore.
Ho sentito un riferimento che mi ha infastidito che ha suggerito che sono i programmatori meno competenti contro ORM. Si potrebbe facilmente dire che è un programmatore incompetente in SQL che è a favore di ORM. Quindi non facciamo questo tipo di argomento.
Le ragioni per le quali sono contrario all'ORM sono che ritengo che tolga la trasparenza e renda difficile apportare le inevitabili modifiche in corso che rappresentano una parte importante di tutto il ciclo di sviluppo. Se uno sviluppatore non è fluente in un particolare ORM e viene assunto e ha bisogno di apportare modifiche al database, un'attività che potrebbe richiedere un altro ora potrebbe richiedere molte ore. Quindi lo sviluppo di un'applicazione "rapida" diventa "paralizzante" la manutenzione dell'applicazione.
Credo anche che i modelli di progettazione complessi in cui una lingua scrive automaticamente un'altra lingua dovrebbero essere generalmente evitate. ORM non è l'unico esempio di questo, ovviamente. Un altro esempio è PHP che scrive XHTML. Nota che ogni riga di codice che scriviamo deve essere o dovrebbe essere orientata agli oggetti. Incorporando il nostro linguaggio di markup e la sintassi delle query invece di avere il nostro linguaggio di programmazione "automagicamente", rende l'applicazione più trasparente (più facile da capire), il debug e la manutenzione. Inoltre, alcuni potrebbero dire che un ORM "libera" i progetti dai vincoli di un particolare motore di database. Ma per quanto riguarda i vincoli del tuo nuovo motore ORM "fadish"? Puoi praticamente garantire che i principali motori di database saranno supportati più a lungo della maggior parte degli ORM.
Vorrei anche sottolineare che ORM non è VMC, anche se molti VMC sono in bundle con ORM. È perfettamente valido, e penso che sia desiderabile nella maggior parte dei casi, creare modelli che contengono metodi fatti a mano con SQL scritto a mano.
Vorrei anche smentire un altro mito: che gli ORM siano collegati al RAD o allo sviluppo rapido di applicazioni. Non lo compro perché nella mia esperienza personale spendo solo il 10% del mio tempo a scrivere modelli SQL e crafting per CRUD. Quindi, anche se ORM ridurrebbe questo tempo a metà (e non credo che lo faccia), allora sarebbe solo un aumento del 5% nel mio tempo di sviluppo (che non è). E io non sono un esperto di SQL o DBA - solo uno sviluppatore con competenze SQL medie. SQL non è solo un grosso spreco di tempo finché il principio di DRY viene seguito e i modelli vengono creati con intenzione.
Personalmente ritengo che ci sia un sacco di "pensieri di gruppo" attorno a ORM - che gli sviluppatori dicono che dovrebbe essere usato perché tutti gli altri dicono che dovrebbe essere usato; è considerata una tecnologia "calda" con cui è possibile recuperare un curriculum. Mettilo sul tuo curriculum se ritieni di doverlo fare, ma non utilizzarlo in un progetto importante solo perché ritieni che "dovresti".