Ihr Leitsatz sollte sein, sich nicht zu wiederholen :
In der Softwareentwicklung ist Don't Repeat Yourself (DRY) ein Prinzip der Softwareentwicklung, das darauf abzielt, die Wiederholung von Informationen aller Art zu reduzieren, insbesondere in mehrschichtigen Architekturen. Das DRY-Prinzip lautet: "Jedes Wissen muss eine einzige, eindeutige und maßgebliche Repräsentation innerhalb eines Systems haben."
Das ORM ist im Wesentlichen eine zusätzliche Schicht (oder Schicht, wenn Sie es vorziehen), die sich bequem zwischen Ihrer Anwendung und Ihren Datenspeichern befindet. Ihre Einschränkungen sollten sich an einem Ort und nur an einem Ort befinden, sei es im ORM oder im Datenspeicher. Andernfalls werden Sie in Kürze verschiedene Versionen von diesen beibehalten. Das willst du wirklich nicht.
In der Praxis generieren die meisten halbwegs vernünftigen ORMs jedoch automatisch einen Großteil Ihrer Modelle aus Ihrem Datenschema. Obwohl es immer noch Duplikate gibt, ist die Wahrscheinlichkeit für Wartungsarbeiten gering, da der duplizierte ORM-Code jedes Mal nach demselben Muster generiert wird. Es wäre ideal, keinen doppelten Code zu haben, aber automatisch generierte Einschränkungen sind das zweitbeste.
Wenn Sie Ihre Einschränkungen an einem Ort haben, bedeutet dies nicht unbedingt, dass Sie alle Einschränkungen an demselben Ort haben sollten. Einige, wie Einschränkungen der referenziellen Integrität, sind möglicherweise besser für den Datenspeicher geeignet (gehen jedoch möglicherweise verloren, wenn Sie in einen anderen Datenspeicher wechseln), und andere, vor allem solche, bei denen es um komplexe Geschäftslogik geht, eignen sich besser für Ihren ORM. Es wäre besser, alle Äpfel in einem Korb zu haben, aber ...
Ausfälle
Sie erwähnen den ORM-Fehler. Dies ist für Ihre Frage absolut irrelevant. Ihre Anwendung sollte den ORM und die Datenspeicher als eine Einheit betrachten. Wenn dies fehlschlägt, schlägt dies fehl. Es ist keine gute Idee , den ORM zu umgehen, um direkt mit dem Datenspeicher zu kommunizieren .
Umgehen des ORM für alles andere
Auch keine gute Idee. Dies kann jedoch verschiedene Gründe haben:
Ältere Teile der Anwendung, die vor der Einführung des ORM erstellt wurden.
Das ist eine schwierige Frage , und genau die Situation , die ich mit zu tun habe gerade jetzt , daher meine ständige Wiederholung von „Wartung Hölle“. Entweder behalten Sie die Nicht-ORM-Teile bei oder Sie schreiben sie neu, um das ORM zu verwenden. Die zweite Option ist anfangs vielleicht sinnvoller, aber es ist eine Entscheidung, die ausschließlich davon abhängt, was genau diese Teile Ihrer Anwendung tun und wie wertvoll ein vollständiges Umschreiben auf lange Sicht sein würde.
Wenn Sie versuchen, einen Schlüssel in einer schlecht gestalteten MySQL-Tabelle mit 2 * 10 ^ 8 Zeilen zu ändern (ohne Ausfallzeiten), werden Sie verstehen, woher ich komme.
Nicht ältere Teile der Anwendung, die unbedingt direkt mit dem Datenspeicher kommunizieren müssen:
Noch kniffliger. ORMs sind ausgefallene Tools und kümmern sich um fast alles, aber manchmal stören sie einfach oder sind sogar völlig nutzlos. Das Schlagwort (buzzphrase wirklich) ist objektrelationale Impedance Mismatch , einfach ausgedrückt , es ist technisch nicht möglich Ihre ORM zu tun alles , was Ihre relationale Datenbank tut, und für einige der Dinge , die sie tun, gibt es eine erhebliche Leistungseinbuße.
Bemerkungen
Unter dem Gesichtspunkt der Datenintegrität MÜSSEN sich Einschränkungen auf die Datenbank und SOLLTEN sich auf die Anwendung beziehen. Was passiert, wenn auf Ihre Anwendung über eine Web- und eine Desktop-Anwendung, eine mobile App oder einen Webservice zugegriffen wird? - Luiz Damim
Hier wäre das Hinzufügen einer zusätzlichen Ebene äußerst hilfreich. Wenn es sich um eine Webanwendung handelt, würde ich eine REST-API verwenden. Ein allzu simpler Entwurf dafür wäre:
Der ORM würde sich zwischen der API und den Datenspeichern befinden, und alles, was hinter der API (einschließlich der API) steckt, würde als eine Einheit aus den verschiedenen Anwendungen betrachtet.