Frage

In welchen Bereichen tun jeder dieser Software-Architekturen leuchten oder nicht?

Welche Schlüsselanforderungen würden Sie auffordern, einen über den anderen zu wählen?

Gehen Sie davon aus, dass Sie Entwickler zur Verfügung, die auch guten objektorientierten Code tun kann als gute Datenbank-Entwicklung.

Auch vermeiden Sie bitte heilige Kriege :) alle drei Technologien haben Vor- und Nachteile, die mich interessieren, wo am besten geeignet zu verwenden, die.

War es hilfreich?

Lösung

Jedes dieser Werkzeuge stellen Abstraktionsebene unterscheiden, zusammen mit unterschiedlichen Punkten Verhalten außer Kraft zu setzen. Dies ist Architektur Auswahl, und alle architektonischen Entscheidungen hängen von Kompromissen zwischen Technologie, Steuerung und Organisation, die beide der Anwendung selbst und dem Umfeld, in dem es eingesetzt wird.

  • Wenn Sie mit einer Kultur zu tun hat, wo ‚-Regel das Quartier‘ DBAs, dann eine gespeichertes Verfahren basierte Architektur einfacher zu implementieren sein. Auf der anderen Seite, kann es sehr schwierig sein, zu verwalten und zu Version Stored Procedures.

  • Code-Generatoren leuchten, wenn Sie statisch typisierten Sprachen verwenden, da Sie Fehler bei der Kompilierung-Zeit statt zur Laufzeit fangen.

  • ORMs sind ideal für Integrations-Tools, in denen Sie möglicherweise mit verschiedenem RDBMSes und Schema auf einer Installations-to-Installationsbasis beschäftigen. Ändern Sie eine Karte und Ihre Anwendung geht aus der Arbeit mit Oracle People auf die Arbeit mit Microsoft Dynamics auf SQL Server.

Ich habe Anwendungen gesehen, in denen Code generiert wird verwendet, um mit Stored Procedures Schnittstelle, da die gespeicherten Prozeduren gezwickt werden könnten Einschränkungen bei dem Code-Generator zu umgehen.

Letztendlich ist die einzig richtige Antwort hängt von dem Problem zu lösen und die Umwelt Sie versuchen, wo die Lösung ausführen muss. Alles andere argumentiert, die korrekte Aussprache von ‚Kartoffel‘.

Andere Tipps

Ich werde meinen zwei Cent hinzufügen

Stored Procedures

  • Kann leicht optimiert werden
  • Abstrakte grundlegende Geschäftsregeln, die Verbesserung der Datenintegrität
  • ein gutes Sicherheitsmodell Stellen (keine Notwendigkeit, Lese- oder Schreibberechtigungen auf eine Front gewähren db Benutzer zugewandten)
  • Glanz, wenn Sie viele Anwendungen haben die gleichen Daten zugreifen

ORMs

  • Lassen Sie sich nur auf der Domäne konzentrieren und hat einen „reinen“ objektorientierten Ansatz für die Entwicklung
  • leuchten, wenn die Anwendung Quer db kompatibel sein müssen
  • Glanz, wenn Ihre Anwendung ist vor allem durch das Verhalten angetrieben anstelle von Daten

Code-Generatoren

  • Gibt Ihnen Ähnliche Vorteile wie ORMs, mit höheren Wartungskosten, aber mit besserer Anpassbarkeit.
  • Sind in der Regel überlegen ORMs dass ORMs neigen Fehler zur Laufzeitfehler handeln kompilieren Zeit, die in der Regel vermieden werden soll

Ich bin damit einverstanden, dass es Vor-und Nachteile für alles und viel hängt von Ihrer Architektur. Aber sagen, dass ich versuche, ORM zu verwenden, wo es Sinn macht. Ein großer Teil der Funktionalität ist schon da und in der Regel helfen sie SQL-Injection zu verhindern (plus es hilft, neu zu erfinden das Rad zu vermeiden).

Bitte beachten Sie diese zwei Beiträge zum Thema (dynamische SQL vs Stored Procedures vs ORM) für weitere Informationen

Dynamische SQL vs. gespeicherte Prozeduren
Was ist besser: Ad-hoc-Abfragen oder gespeicherte Prozeduren

ORMs gegen Stored Procedures
Warum ist parametrisierte SQL erzeugt durch NHibernate genauso schnell wie eine gespeicherte Prozedur?

ORMs und Code-Generatoren sind so eine Art auf der einen Seite des Feldes, und gespeicherte Prozeduren sind auf einem anderen. Typischerweise ist es einfacher ORMs und Code-Generatoren in Greenfield-Projekte zu verwenden, weil Sie Ihre Datenbank-Schema anpassen können Sie das Domänenmodell anzupassen erstellen. Es ist viel schwieriger, sie mit Legacy-Projekten zu verwenden, denn wenn Software mit einem „Daten-first“ mindset geschrieben ist, ist es schwierig, es mit einem Domänenmodell zu wickeln.

aber sagen, dass alle drei der Ansätze haben Wert. Stored Procedures kann leichter zu optimieren, aber es kann verlockend sein, Business-Logik in ihnen zu stecken, die sich in der Anwendung wiederholt werden. ORMs funktioniert gut, wenn Ihr Schema das Konzept der ORM übereinstimmt, kann aber schwierig sein, nicht anpassen, wenn. Code-Generatoren kann ein schöner Mittelweg sein, weil sie einige der Vorteile eines ORM bieten, sondern Anpassung des generierten Codes erlauben - aber wenn Sie in die Gewohnheit von den generierten Code zu verändern, Sie dann zwei Probleme haben, weil Sie wird es jedes Mal neu generiert werden, es zu ändern.

Es gibt keine richtige Antwort, aber ich neige mehr in Richtung der ORM Seite, weil ich glaube, dass es mehr Sinn macht, mit einer objekt erster Einstellung zu denken.

Stored Procedures

  • Vorteile: kapselt Datenzugriffscode und ist anwendungsunabhängig
  • Nachteile: Kann RDBMS-spezifisch sein und die Entwicklungszeit erhöhen

ORM

Wenigstens einige ORMs Zuordnung zu gespeicherten Prozeduren erlauben

  • Vorteile: Zugriff Abstracts Datencode und ermöglicht es Unternehmen in domänenspezifischer Art und Weise geschrieben werden Objekte
  • Nachteile: Mögliche Performance-Overhead und begrenzte Mapping-Fähigkeiten

Code-Erzeugung

  • Vorteile: Kann verwendet werden, gespeichert-Proc-basierten Code oder ein ORM oder eine Mischung aus beidem zu erzeugen
  • Nachteile: Code-Generator Schicht kann zusätzlich zu Verständnis generierten Code
  • beibehalten werden

Sie haben vergessen, eine wesentliche Option, die eine eigene Kategorie verdient: ein Hybrid-Datenmapping-Framework wie iBatis .

Ich habe mit iBatis zufrieden, weil es Ihrem OO-Code bleibt OO in der Natur kann, und Ihre Datenbank bleibt relational in der Natur, und löst das Impedance Mismatch durch eine dritte Abstraktion Zugabe (die Abbildungsschicht zwischen den Objekten und den Beziehungen), dass ist verantwortlich für die zwei Mapping, anstatt zu versuchen, fit ein Paradigma in die andere zu erzwingen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top