ORM: Ja oder Nein? [geschlossen]

7

Ich muss ein mittelgroßes Projekt in Java anfangen, aber ich bin kein großer Fan von ORMs im Allgemeinen, also ist die Frage: Soll ich das Projekt mit einem ORM (für späteren Gebrauch) entwerfen oder nicht?

Das RDBMS ist Oracle 10g und die Abfragen werden sehr an die Oracle-Syntax / -Funktionen (d. h. Text, Mining, CONNECT BY usw.) gekoppelt.

Vielen Dank.

    
ATorras 05.05.2009, 16:35
quelle

11 Antworten

10

Vielleicht möchten Sie sich diese frühere Frage ansehen, die den Nutzen von ORMs diskutiert: Was sind die Vorteile eines ORM?

Der relevanteste Teil (aus der akzeptierten Antwort):

  

Wenn Sie komplexes, von Hand angepasstes SQL haben,   Es macht keinen Sinn, einen zu verwenden   ORM.

Wenn Sie ständig am ORM vorbeikommen und Ihr eigenes SQL schreiben, könnte das ORM einfach im Weg stehen.

    
Aaron Maenpaa 05.05.2009, 16:38
quelle
5

Da ich Ihren Beitrag nicht kommentieren darf, kommentieren Sie bitte so (fehlende Punkte).

Wäre gut für die Diskussion WARUM du ORM nicht magst.

Imo, ich würde dafür gehen. Und wenn Sie aus irgendeinem Grund eine Abfrage finden, die vom ORM langsam ist, dann würde ich es selbst machen. Nur weil Sie ein ORM verwenden, bedeutet das nicht, dass Sie es für alle verwenden müssen. Aber ja, es wäre bevorzugt.

    
Carl Bergquist 05.05.2009 16:43
quelle
5

Ich persönlich habe sie (na ja, Hibernate) als eine unglaubliche Zeit Sink gefunden. Anstatt viel Zeit zu sparen, habe ich viel zu viel Zeit damit verbracht, herauszufinden, was zum Teufel es eigentlich unter den Deckeln macht. Wie andere bereits erwähnt haben, wenn Ihr Datenmodell über eine bestimmte Komplexität hinaus wächst, erzeugt eine weitere Schicht zwischen Ihnen und der DB nur mehr Reibung. Wenn Ihr Datenmodell nicht so komplex ist, dann brauchen Sie ORM sowieso nicht.

Ich mache empfehle, eine Art von Abstraktion zu haben, um SQL aus Ihrem Java-Code herauszuhalten, aber das kann einfach mit einer DAO-Ebene und Property-Dateien oder was auch immer geschehen. Auch Tools wie IBATIS oder Spring JDBC können hilfreich sein, da Sie immer noch eigene Abfragen schreiben können und einfach das Framework verwenden, um mit dem gesamten Code für das Mischen von Daten zwischen JDBC und Ihren Model-Objekten zu helfen.

PS: amüsante Randnotiz. In meinem Büro haben wir tatsächlich ein gerahmtes Bild von Gavin King, das wir alle in effigy verfluchen. "Hey, es ist dein , um mit dem heutigen Hibernate-Problem umzugehen, also hier ist Gavin." : -)

    
George Armhold 05.05.2009 18:06
quelle
3

Ein weiterer Vorteil eines ORM ist, dass es in Ihrem Lebenslauf sehr gut aussieht. Die meisten Jobs, die heute beworben werden (mindestens Java-Entwickler), erfordern ein gewisses Wissen über ORMs. Wenn Sie also die Möglichkeit haben, an einem Projekt zu arbeiten, würde ich Spring und Hibernate wählen, da dies Ihren Lebenslauf wirklich verbessern wird.

Ich dachte, dass der Link zu der anderen Frage die technischen Vorteile ziemlich gut abdeckt, also werde ich nichts darüber sagen.

    
willcodejavaforfood 05.05.2009 16:43
quelle
3

Ich persönlich bevorzuge es, so nah wie möglich an SQL zu sein, also würde ich iBatis, JOOQ oder MentaBean verwenden. MentaBean bietet übrigens einen Ansatz, der so nah wie möglich an SQL ist und gleichzeitig eine Menge Hilfe beim Standard-JDBC-Code bietet.

    
TraderJoeChicago 24.09.2011 19:53
quelle
2

Ein ORM entkoppelt absichtlich Ihre Arbeitsobjekte von der Datenbank und erzeugt eine Abstraktion (zwangsläufig mit Lecks). Sie würden also einfach wieder durch Tunneling gehen, um das wiederherzustellen, was Sie absichtlich eliminiert haben.

Wenn ein Großteil Ihrer Anwendung absichtlich in der Datenbank implementiert wird, fügt ein ORM nur Rauschen zu Ihrem Signal hinzu - und dämpft das Signal.

    
dkretz 05.05.2009 18:19
quelle
1

Es kommt darauf an ...

Und Sie müssen kein ORM für jeden DB-Zugriff verwenden ...

    
pgras 05.05.2009 16:40
quelle
1

Ja. ORMs können einem App-Entwickler viel Arbeit abnehmen; Zumindest sollte Design mit ihnen im Auge nicht viel Belastung für das Design hinzufügen, und kann erheblich in Zukunft helfen, wenn Sie sich entscheiden, mit einem ORM gehen.

    
Paul Sonier 05.05.2009 16:44
quelle
1

Wie andere bereits erwähnt haben; Wenn Sie stark (relationale) DB-abhängig sind, geben ORMs wenig und fügen nur eine nicht so nützliche Abstraktion hinzu. Aber am wichtigsten: Wollen Sie (wollen) Daten als Objekte behandeln oder nicht? Wenn ja, sind ORM dafür ausgelegt. Wenn nicht, warum? Und Sie können ORM später bei Bedarf hinzufügen - kann etwas länger dauern als im Voraus, aber das Umgekehrte zu tun (Hibernate auszusortieren, nachdem es Ihnen gerade in den Weg kommt ...) ist viel schlimmer.

Aber es gibt auch Unterschiede zwischen ORMs; iBatis könnte zum Beispiel besser passen als Hibernate (es gibt andere Fragen zu diesem speziellen Thema).

    
StaxMan 05.05.2009 16:45
quelle
1

OR-Mapping kann in der Tat ein Problem für Ihr datenbankspezifisches SQL sein. Einige Konzepte des OR-Mappings sind jedoch sehr leistungsfähig und erleichtern die Interaktion mit Ihrer Datenbank. Einige dieser Konzepte, die vielen OR-Mappern gemeinsam sind, sind:

  • Code-Generierung für Ihr Datenbankschema.
  • Typ-Sicherheit (von einigen ORMs)
  • Eine robustere variable Bindung als die von JDBC
  • bereitgestellte
  • SQL-Zusammensetzung nach Objekten, um SQL-Syntaxfehler zu vermeiden

Ein gutes Werkzeug für Ihre Aufgabe könnte Ссылка sein, mit dem Sie jedes beliebige SQL erstellen können (einschließlich verschachtelter Selektionen, Vereinigungen, Komplexen) Joins, Aliasing, gespeicherte Prozeduren, UDTs usw.)

    
Lukas Eder 26.11.2010 22:22
quelle
1

ORM: Ja, für Unternehmen wie Software, wo Daten komplex sind ... mehrere Ebenen, Tabellen, Ebenen ... Aber auch hier wird eine gute Mischung aus NHibernate und EF6 und Datenbankansichten empfohlen.

Nein für spezielle Apps. wie Messung und wo Sie wirklich eine Menge Daten speichern müssen, aber ohne Datenkomplexität

Mit ORM gibt es mehrere Möglichkeiten, alles hängt davon ab, was Sie wollen.

Als echter ORM-Mapper empfehle ich stark NHibernate und Fließende NH -Mappings. Sie brauchen viel Forschung, um eine schöne Architektur zusammenzustellen, aber dann steht Ihnen nichts im Wege. Mit minimalen Kompromissen erhalten Sie echte Flexibilität.

EF6x (Kern ist nicht prod.-ready IMHO) wird ORM genannt, aber was es generiert, ist näher an einem DAL. Es gibt einige Dinge, die Sie mit EF6 nicht effektiv machen können. Dennoch ist dies mein Lieblingswerkzeug für ein Lesemodell, während ich es mit NHibernate kombiniere (wobei NH für ein DDD / Schreibmodell verwendet wird).

Jetzt zu Leistung - es ist immer Vor- und Nachteile. Wenn Sie tiefer in ORM Architektur eintauchen (siehe meinen Artikel: vermeiden ORM schlechte Angewohnheiten ) dann finden Sie intuitiv die Wege, um es schneller zu machen. Hier ist mein anderer Artikel darüber, wie man EF6x 5x schneller macht (zumindest für Lese-Situationen): EF6.x 5x schneller

    
baHI 26.02.2017 15:02
quelle

Tags und Links