Warum brauchen wir Entitätsobjekte?

Ich wirklich brauchen, um einige ehrliche, nachdenkliche Debatte über die Verdienste der derzeit anerkannten enterprise application design-Paradigma.

Ich bin nicht davon überzeugt, dass die entity-Objekte existieren sollte.

Durch entity-Objekten meine ich die typischen Dinge, die wir neigen dazu zu bauen für unsere Anwendungen, wie "Person", "Konto", "Bestellen", etc.

Meine aktuelle design-Philosophie ist diese:

  • Die ganze Datenbank, muss der Zugriff erfolgt über gespeicherte Prozeduren.
  • Wenn Sie Daten benötigen, eine gespeicherte Prozedur aufrufen und Durchlaufen einen SqlDataReader oder die Zeilen in einer DataTable

(Anmerkung: ich habe auch eine integrierte enterprise-Anwendungen mit Java EE, java-Leute bitte ersetzen Sie die equvalent für meine .NET Beispiele)

Ich bin nicht anti-OO. Ich Schreibe viele Klassen für verschiedene Zwecke, nur nicht von Personen. Ich gebe zu, dass ein großer Teil der Klassen die ich Schreibe, sind statische helper Klassen.

Ich bin nicht Gebäude Spielzeug. Ich spreche von großen, high-volume-transactional-Applikationen auf mehreren Rechnern. Web-Applikationen, windows services, web services, b2b-Interaktionen, you name it.

Ich verwendet habe ODER Mapper. Ich habe geschrieben ein paar. Ich habe die Java-EE-stack, CSLA, und ein paar andere Mittel. Ich habe nicht nur Sie, sondern aktiv entwickelt und gepflegt werden diese Anwendungen in Produktionsumgebungen.

Ich bin gekommen, um die Schlacht-getestet Schlussfolgerung, dass die entity-Objekte sind immer im Weg, und unser Leben wäre so viel einfacher ohne Sie.

Betrachten Sie dieses einfache Beispiel: Sie erhalten einen support-Anruf über eine bestimmte Seite in Ihrer Anwendung, die nicht korrekt funktioniert, vielleicht eines der Felder nicht beibehalten wird, wie es sein sollte. Bei meinem Modell, die Entwickler zugewiesen, um das problem zu finden, öffnet genau 3 Dateien. Eine ASPX, ASPX.CS und eine SQL-Datei mit der gespeicherten Prozedur. Das problem könnte eine fehlende parameter an die gespeicherte Prozedur aufrufen, dauert nur wenige Minuten zu lösen. Aber mit jedem entity-Modell, Sie werden immer Feuer den debugger starten Sie den code schrittweise, und Sie können am Ende mit 15-20 Dateien öffnen Sie in Visual Studio. Durch die Zeit, die Sie Schritt bis zu der Unterseite des Stapels, haben Sie vergessen, wo Sie angefangen haben. Wir können nur so viele Dinge in unseren Köpfen zu einer Zeit. Software ist unglaublich Komplex ohne Zugabe von unnötigen Schichten.

Entwicklung Komplexität und Problemlösung sind nur eine Seite von meinem Haar in der Suppe.

Reden wir nun über die Skalierbarkeit.

Entwickler wissen, dass jeder und jedes mal, wenn Sie schreiben oder modifizieren von code für die Interaktion mit der Datenbank, die Sie tun müssen, um eine throrough Analyse der genauen Auswirkungen auf die Datenbank? Und nicht nur die Entwicklung kopieren, meine ich, ein nachahmen der Produktion, damit Sie sehen können, dass die zusätzliche Spalte, die Sie jetzt benötigen für Ihr Objekt nur ungültig die aktuelle Abfrage-plan und einem Bericht, der ausgeführt wurde, in 1 Sekunde dauert nun 2 Minuten, nur weil Sie fügte hinzu, eine einzige Spalte in die select-Liste? Und es stellt sich heraus, dass der index, den Sie nun benötigen, ist so groß, dass die DBA gehen zu müssen, ändern Sie die physische Anordnung der Dateien?

Wenn Sie lassen Menschen zu weit Weg von den physischen datenspeicher mit einer Abstraktion, die Sie erstellen Chaos mit einer Anwendung, die skaliert werden.

Ich bin kein Eiferer. Ich kann überzeugt sein, wenn ich falsch bin, und vielleicht bin ich, da es so einen starken push in Richtung Linq to Sql, ADO.NET EF, Hibernate, Java EE, etc. Bitte denken Sie über Ihre Antworten, wenn mir etwas fehlt ich will wirklich wissen, was es ist, und warum ich das ändern sollte mein denken.

[Bearbeiten]

Wie es aussieht, diese Frage ist plötzlich wieder aktiv, so, jetzt haben wir die neue Kommentar-Funktion, die ich kommentiert habe direkt auf mehrere Antworten. Vielen Dank für die Antworten, ich denke, das ist eine gesunde Diskussion.

Wahrscheinlich ich hätte mehr klar, ich spreche von enterprise-Anwendungen. Ich kann nicht wirklich kommentieren, zu sagen, ein Spiel, das läuft auf einem anderen desktop oder eine mobile app.

Eine Sache, die ich haben, um sich hier an der Spitze in Reaktion auf mehrere ähnliche Antworten: Orthogonalität und die Trennung der Bereiche oft zitiert als Gründe zu gehen, entity/ORM. Gespeicherte Prozeduren, für mich sind das beste Beispiel für die Trennung von Bedenken, dass ich mir denken kann. Wenn Sie nicht zulassen, alle anderen den Zugriff auf die Datenbank, in anderer Weise als über gespeicherte Prozeduren, die Sie könnte in der Theorie Neugestaltung Ihrer gesamten Daten-Modell und nicht zu brechen jeden code, so lange, wie Sie verwaltet die ein-und Ausgänge der gespeicherten Prozeduren. Sie sind ein perfektes Beispiel des Programmierens mit Vertrag (nur so lange, wie Sie vermeiden "select *" und dokumentieren die Ergebnis-sets).

Jemanden Fragen, der war in der Industrie für eine lange Zeit und arbeitete mit langlebigen Anwendungen: wie vielen Anwendungs-und UI-Schichten sind gekommen und gegangen, während eine Datenbank gelebt hat? Wie schwer ist es zu tunen und umgestalten einer Datenbank, wenn es 4 oder 5 verschiedene Persistenz-Schichten generieren von SQL, um auf die Daten? Sie können nichts ändern! ORMs oder anderen code, der generiert die SQL - sperren Sie Ihre Datenbank in Stein.

InformationsquelleAutor der Frage |

Schreibe einen Kommentar