Wenn Sie die "Profis" motivieren würden, warum Sie ein ORM für das Management / den Kunden verwenden würden, welche Gründe wären das?
Versuchen Sie, einen Grund pro Antwort beizubehalten, damit wir sehen können, was als beste Gründe gewählt wird
Wenn Sie die "Profis" motivieren würden, warum Sie ein ORM für das Management / den Kunden verwenden würden, welche Gründe wären das?
Versuchen Sie, einen Grund pro Antwort beizubehalten, damit wir sehen können, was als beste Gründe gewählt wird
Antworten:
Den Datenzugriff abstrakter und portabler gestalten. ORM-Implementierungsklassen können herstellerspezifisches SQL schreiben, müssen dies also nicht.
Der wichtigste Grund für die Verwendung eines ORM besteht darin, dass Sie über ein umfangreiches, objektorientiertes Geschäftsmodell verfügen und es dennoch speichern und effektive Abfragen schnell in eine relationale Datenbank schreiben können. Aus meiner Sicht sehe ich keine wirklichen Vorteile, die Ihnen ein guter ORM im Vergleich zu anderen generierten DALs bietet, außer den erweiterten Arten von Abfragen, die Sie schreiben können.
Eine Art von Abfrage, an die ich denke, ist eine polymorphe Abfrage. Eine einfache ORM-Abfrage kann alle Formen in Ihrer Datenbank auswählen. Sie erhalten eine Sammlung von Formen zurück. Aber jede Instanz ist je nach Diskriminator ein Quadrat, ein Kreis oder ein Rechteck.
Eine andere Art der Abfrage wäre eine, die eifrig ein Objekt und ein oder mehrere verwandte Objekte oder Sammlungen in einem einzigen Datenbankaufruf abruft. Beispiel: Jedes Formobjekt wird mit seinen ausgefüllten Scheitelpunkt- und Seitensammlungen zurückgegeben.
Es tut mir leid, dass ich mit so vielen anderen hier nicht einverstanden bin, aber ich denke nicht, dass die Codegenerierung ein Grund genug ist, sich für ein ORM zu entscheiden. Sie können viele gute DAL-Vorlagen für Codegeneratoren schreiben oder finden, die nicht den konzeptionellen oder Leistungsaufwand haben, den ORMs verursachen.
Oder wenn Sie der Meinung sind, dass Sie nicht wissen müssen, wie man gutes SQL schreibt, um ein ORM zu verwenden, bin ich anderer Meinung. Es kann sein, dass es aus der Sicht des Schreibens einzelner Abfragen einfacher ist, sich auf ein ORM zu verlassen. Mit ORMs ist es jedoch viel zu einfach, Routinen mit schlechter Leistung zu erstellen, wenn Entwickler nicht verstehen, wie ihre Abfragen mit dem ORM und dem SQL funktionieren, in das sie übersetzen.
Eine Datenschicht, die für mehrere Datenbanken geeignet ist, kann von Vorteil sein. Darauf musste ich mich allerdings nicht oft verlassen.
Am Ende muss ich noch einmal betonen, dass es meiner Erfahrung nach andere Optionen gibt, die die verbleibenden Probleme mit weniger Lernen und weniger CPU-Zyklen lösen, wenn Sie nicht die erweiterten Abfragefunktionen Ihres ORM verwenden.
Oh ja, einige Entwickler finden es lustig, mit ORMs zu arbeiten, daher sind ORMs auch aus der Perspektive, Entwickler glücklich zu machen, gut. =)
Beschleunigung der Entwicklung. Entfernen Sie beispielsweise sich wiederholenden Code wie das Zuordnen von Abfrageergebnisfeldern zu Objektelementen und umgekehrt.
Unterstützung der OO-Kapselung von Geschäftsregeln in Ihrer Datenzugriffsschicht. Sie können Geschäftsregeln in der von Ihnen bevorzugten Anwendungssprache schreiben (und debuggen), anstatt klobige Trigger- und gespeicherte Prozedursprachen.
Generieren von Boilerplate-Code für grundlegende CRUD-Operationen. Einige ORM-Frameworks können Datenbankmetadaten direkt untersuchen, Metadatenzuordnungsdateien lesen oder deklarative Klasseneigenschaften verwenden.
Sie können problemlos zu einer anderen Datenbanksoftware wechseln, da Sie sich zu einer Abstraktion entwickeln.
Entwicklungsglück, IMO. ORM abstrahiert viele der Bare-Metal-Aufgaben, die Sie in SQL ausführen müssen. Es hält Ihre Codebasis einfach: Weniger zu verwaltende Quelldateien und Schemaänderungen erfordern keine stundenlange Wartung.
Ich verwende derzeit ein ORM und es hat meine Entwicklung beschleunigt.
Minimierung der Duplizierung einfacher SQL-Abfragen.
Der Grund, warum ich mich damit beschäftige, besteht darin, den generierten Code aus den DAL-Tools von VS2005 (Schema-Mapping, TableAdapters) zu vermeiden.
Das DAL / BLL, das ich vor über einem Jahr erstellt habe, funktionierte einwandfrei (für das, wofür ich es erstellt hatte), bis jemand anderes damit begann, einige der generierten Funktionen zu nutzen (von denen ich keine Ahnung hatte, dass sie vorhanden waren).
Es sieht so aus, als würde es eine viel intuitivere und sauberere Lösung bieten als die DAL / BLL-Lösung von http://wwww.asp.net
Ich habe darüber nachgedacht, meinen eigenen SQL Command C # DAL-Codegenerator zu erstellen, aber das ORM sieht nach einer eleganteren Lösung aus
Zusammenstellung und Prüfung von Abfragen.
Wenn sich die Tools für ORMs verbessern, ist es einfacher, die Richtigkeit Ihrer Abfragen durch Fehler und Tests bei der Kompilierung schneller zu ermitteln.
Durch das Kompilieren Ihrer Abfragen können Entwickler Fehler schneller finden. Richtig? Richtig. Diese Kompilierung wird ermöglicht, da Entwickler jetzt Abfragen in Code mit ihren Geschäftsobjekten oder -modellen schreiben, anstatt nur SQL-Zeichenfolgen oder SQL-ähnliche Anweisungen.
Wenn Sie in .NET die richtigen Datenzugriffsmuster verwenden, können Sie Ihre Abfragelogik problemlos in Speichersammlungen testen. Dies beschleunigt die Ausführung Ihrer Tests, da Sie nicht auf die Datenbank zugreifen, Daten in der Datenbank einrichten oder sogar einen vollständigen Datenkontext erstellen müssen. [BEARBEITEN] Dies ist nicht so wahr, wie ich es als Einheit gedacht habe Das Testen im Gedächtnis kann schwierige Herausforderungen darstellen . Aber ich finde diese Integrationstests immer noch einfacher zu schreiben als in den Vorjahren. [/ EDIT]
Dies ist heute definitiv relevanter als vor einigen Jahren, als die Frage gestellt wurde, aber dies ist möglicherweise nur bei Visual Studio und Entity Framework der Fall, wo meine Erfahrung liegt. Plugin wenn möglich deine eigene Umgebung.
Ich denke, hier gibt es viele gute Punkte (Portabilität, einfache Entwicklung / Wartung, Konzentration auf OO-Geschäftsmodellierung usw.), aber wenn Sie versuchen, Ihren Kunden oder Ihr Management zu überzeugen, läuft alles darauf hinaus, wie viel Geld Sie durch die Verwendung sparen ein ORM .
Wenn Sie einige Schätzungen für typische Aufgaben (oder sogar größere Projekte, die möglicherweise anstehen) vornehmen, erhalten Sie (hoffentlich!) Einige Argumente für den Wechsel, die schwer zu ignorieren sind.
.net-Ebenen mit Code-Smith-Vorlagen
http://nettiers.com/default.aspx?AspxAutoDetectCookieSupport=1
Warum etwas codieren, das genauso gut generiert werden kann?
Ich denke, ein Nachteil ist, dass ORM in Ihrem POJO aktualisiert werden muss. hauptsächlich im Zusammenhang mit Schema, Beziehung und Abfrage. Ein Szenario, in dem Sie keine Änderungen an Modellobjekten vornehmen sollen, liegt möglicherweise daran, dass es von mehreren Personen gemeinsam genutzt wird, die sich auf einem Projekt oder einem s / w-Client und -Server befinden. In solchen Fällen müssen Sie es in zwei Ebenen aufteilen, was zusätzliche Anstrengungen erfordert.
Ich bin ein Android-Entwickler und wie Sie wissen, sind mobile Apps normalerweise nicht sehr groß. Daher scheint dieser zusätzliche Aufwand zur Trennung von reinem Modell und von Orm betroffenem Modell nicht voll zu sein.
Ich verstehe, dass diese Frage generisch ist. Mobile Apps gehören aber auch zum allgemeinen Dach.