Bei dem Versuch, eine relationale Datenbank von einem objektorientierten Standpunkt aus zu betrachten, gibt es eine relativ große und vielfältige Menge konzeptioneller und technischer Schwierigkeiten. Diese Schwierigkeiten werden zusammenfassend als objektrelationale Impedanzinkongruenz bezeichnet, und der zugehörige Wikipedia-Artikel ist äußerst informativ. Der Artikel nennt einige, ich sehe keinen vernünftigen Weg, sie hier zu beschreiben. Um Ihnen eine allgemeine Vorstellung zu geben, sind sie wie folgt katalogisiert:
- Fehlpaarungen
- Objektorientierte Konzepte
- Datentypunterschiede
- Strukturelle und Integritätsunterschiede
- Manipulative Unterschiede
- Transaktionsunterschiede
- Beheben von Impedanzfehlanpassungen
- Minimierung
- Alternative Architekturen
- Vergütung
- Streit
- Philosophische Unterschiede
Ich denke, wenn Sie sich die Zeit nehmen, den Artikel zu lesen, werden Sie verstehen, dass die Tatsache, dass ORM manchmal als Anti-Pattern beschrieben wird, in der Tat unvermeidlich ist. Die beiden Domänen sind so unterschiedlich, dass jeder Ansatz, eine Domäne wie die andere zu behandeln, standardmäßig ein Anti-Muster ist, in dem Sinne, dass ein Anti-Muster ein Muster ist, das gegen die Philosophie einer Domäne verstößt.
Aber ich denke nicht, dass der Begriff für irgendetwas gelten sollte, das im Wesentlichen als Brücke zwischen zwei sehr unterschiedlichen Domänen fungiert. Das Beschriften eines Musters als Anti-Muster ist nur innerhalb seiner Domäne sinnvoll. Die Frage, ob es sich um ein Anti-Pattern handelt oder nicht, spielt also keine Rolle.
Aber ist es nützlich? Ja, ORM ist eines der nützlichsten Anti-Patterns. Sie werden verstehen, warum nur, wenn Sie sich in einer praktischen Situation befinden, in der Sie Datenbanken in einem Projekt austauschen müssen. Oder sogar ein Upgrade auf eine andere Version derselben Datenbank. ORM ist eines dieser Dinge, die Sie nur dann vollständig verstehen, wenn Sie sie tatsächlich benötigen.
Natürlich ist ORM, wie alles Nützliche, sehr anfällig für Missbrauch. Wenn Sie der Meinung sind, dass es die Notwendigkeit ersetzt, alles über die Datenbank zu wissen, an der Sie arbeiten, wird es zurückkommen und Sie beißen. Hart.
Lassen Sie mich zum Schluss noch eine meiner Antworten schamlos in das verwandte Thema "Entspricht / fördert das ActiveRecord-Muster den SOLID-Entwurfsprinzipien?" Einfügen. Frage, die für mich eine weitaus relevantere Frage ist als "ist es ein Anti-Muster".