Il punto di forza di un ORM è che consente di modellare il comportamento dell'applicazione utilizzando tecniche orientate agli oggetti. In un mondo attentamente progettato, hai un livello dell'applicazione in cui la lingua del business incontra perfettamente la lingua del team di sviluppo. L'ORM è un attivatore di questo, se l'ORM è usato in modo ragionevole.
Il punto debole è che il numero di persone che realmente, davvero ottengono la programmazione orientata agli oggetti è piuttosto piccolo. Molte persone scrivono spaghetti e polpette, con oggetti altamente accoppiati che hanno un comportamento limitato e il comportamento reale finisce nelle orribili classi "Servizio" e "Manager" di 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 realmente 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 livello del dominio e farlo correttamente prima di iniziare a preoccuparti troppo della progettazione del database. Se applicato bene, con l'aiuto di strumenti di migrazione degli schemi sensibili, e ORM può aiutarti a prevenire l'accumulo di debito di codice.
Ho sviluppato applicazioni in cui un ORM ha mantenuto il codice dell'applicazione semplice, leggibile e testabile e ha avuto prestazioni ragionevoli. Ho anche mantenuto applicazioni in cui il pattern è stato utilizzato in modo improprio e il codice è stato contorto, non testabile, lento e fragile; si scopre che l'ORM stesso aveva poco a che fare con questo, tranne che invece di scrivere codice cattivo che modellava male il dominio dell'applicazione, il team di ingegneri legacy ha scritto un codice errato che modellava male il dominio dell'applicazione E un cattivo codice del livello di servizio che trascurava tutto il valore che il loro ORM potrebbe fornire loro.
Gli ORM non ti renderanno più intelligenti, ma nelle mani dello sviluppatore giusto, possono portare a un codice più gestibile e di qualità superiore.