Il tuo principio guida dovrebbe essere Non ripetere te stesso :
Nell'ingegneria del software, Don't Repeat Yourself (DRY) è un principio di sviluppo del software volto a ridurre la ripetizione di informazioni di ogni tipo, particolarmente utile nelle architetture multilivello. Il principio DRY è dichiarato come "Ogni pezzo di conoscenza deve avere una rappresentazione unica, inequivocabile e autorevole all'interno di un sistema".
L'ORM è essenzialmente un livello aggiuntivo (o livello se preferisci), comodamente seduto tra la tua applicazione e i tuoi archivi di dati. I tuoi vincoli dovrebbero essere in un posto, e in un solo posto, sia esso l'ORM o l'archiviazione dei dati, altrimenti abbastanza presto finirai per mantenerne versioni diverse. È davvero non si vuole farlo.
Tuttavia, in pratica, la maggior parte degli ORM decenti genera automaticamente molti dei tuoi modelli dal tuo schema di dati. Sebbene ci sia ancora duplicazione, le possibilità di inferno di manutenzione sono minime poiché il codice ORM duplicato viene generato seguendo lo stesso schema ogni volta. Sarebbe ideale non avere un codice duplicato, ma i vincoli generati automaticamente sono la cosa migliore da fare.
Inoltre, avere i tuoi vincoli in un posto non significa necessariamente che dovresti avere tutti i tuoi vincoli nello stesso posto. Alcuni, come i vincoli di integrità referenziale, potrebbero essere più adatti per l'archiviazione dei dati (ma potrebbero andare persi se ci si sposta in un altro archivio di dati), e alcuni, principalmente quelli che riguardano una logica aziendale complessa, sono più adatti all'ORM. Sarebbe preferibile avere tutte le mele nello stesso paniere, ma ...
fallimenti
Lei parla dell'errore ORM. Questo è assolutamente irrilevante per la tua domanda, la tua applicazione dovrebbe pensare all'ORM e agli archivi di dati come un'unica entità. Se fallisce, fallisce, bypassare l'ORM per parlare direttamente con l'archiviazione dei dati non è una buona idea.
Bypassare l'ORM per qualsiasi altra cosa
Inoltre non è una buona idea. Tuttavia, può accadere per vari motivi:
Parti legacy dell'applicazione che sono state create prima dell'introduzione dell'ORM.
Questa è una situazione difficile, ed è esattamente la situazione che sto affrontando in questo momento , quindi la mia costante ripetizione di "inferno di manutenzione". O continui a mantenere le parti non ORM o le riscrivi per utilizzare l'ORM. La seconda opzione potrebbe inizialmente avere più senso, ma è una decisione che si basa esclusivamente su cosa stanno facendo esattamente quelle parti dell'applicazione e su quanto prezioso sarebbe una riscrittura completa a lungo termine.
Prova a cambiare una chiave in una tabella MySQL 2 * 10 ^ 8 mal progettata (senza tempi di inattività) e capirai da dove vengo.
Parti non legacy dell'applicazione che devono assolutamente parlare direttamente con l'archiviazione dei dati:
Ancora più complicato. Gli ORM sono strumenti fantasiosi e si occupano di quasi tutto, ma a volte si intromettono o addirittura sono assolutamente inutili. La parola d'ordine (buzzphrase in realtà) è un'incongruenza di impedenza relazionale all'oggetto, in poche parole non è tecnicamente possibile per il tuo ORM fare tutto ciò che fa il tuo database relazionale, e per alcune delle cose che fanno, c'è una significativa penalità delle prestazioni.
Commenti
Dal punto di integrità dei dati, i vincoli DEVONO essere sul database e DOVREBBE essere sull'applicazione. Cosa succede se si accede alla propria applicazione da un Web e da applicazioni desktop, da un'app mobile o da un servizio Web? - Luiz Damim
È qui che aggiungere un ulteriore livello sarebbe estremamente utile e se parliamo di un'applicazione Web, utilizzerei un'API REST. Un design troppo semplicistico per questo sarebbe:
L'ORM si collocherebbe tra l'API e gli archivi dei dati e tutto ciò che sta dietro l'API (incluso esso) verrebbe considerato una singola entità dalle varie applicazioni.