Il punto di forza di un ORM è che ti consente di modellare il comportamento dell'applicazione usando tecniche orientate agli oggetti. In un mondo attentamente ingegnerizzato, hai un livello dell'applicazione in cui la lingua del business incontra ordinatamente la lingua del team di sviluppo. L'ORM è un fattore abilitante di ciò, se l'ORM viene utilizzato in modo ragionevole.
Il punto debole è che il numero di persone che in realtà ottengono davvero una programmazione orientata agli oggetti è piuttosto piccolo. Molte persone scrivono spaghetti e polpette, con oggetti altamente accoppiati che hanno uno scarso comportamento proprio e il comportamento effettivo finisce in orribili classi di "Servizio" e "Manager" da 8000 righe, e quel codice è spesso così contorto che tutti hanno paura di cambiarlo perché non riescono a capire quali saranno gli effetti collaterali.
Inoltre, molte persone non ottengono davvero il modello relazionale. Un ORM non li aiuterà a ottenerlo, e non li aiuterà estraendo il modello relazionale. Ti consente solo di concentrarti presto sul tuo livello di dominio e di ottenerlo subito prima di iniziare a preoccuparti troppo della progettazione del database. Se applicato correttamente, con l'aiuto di strumenti di migrazione di schemi sensibili e ORM può aiutarti a prevenire l'accumulo di debito del codice.
Ho creato applicazioni in cui un ORM ha mantenuto il codice dell'applicazione semplice, leggibile e testabile e ha prestazioni ragionevoli. Ho anche mantenuto applicazioni in cui lo schema era usato in modo improprio e il codice era contorto, non verificabile, lento e fragile; si scopre che l'ORM stesso aveva poco a che fare con questo, tranne per il fatto che invece di scrivere codice errato che modellava male il dominio dell'applicazione, il team di ingegneri legacy ha scritto codice errato che modellava male il dominio dell'applicazione E codice del livello di servizio errato che trascurava tutto il valore che il loro ORM potrebbe fornire loro.
Gli ORM non ti renderanno più intelligente, ma nelle mani del giusto sviluppatore, possono portare a codice più gestibile e di qualità superiore.