Frage

ich immer wieder begegne Diskussionen darüber, wo die Business-Logik zu setzen: in einer Business-Schicht im Anwendungscode oder unten in der DB in Bezug auf den gespeicherten Prozeduren . Persönlich würde ich zum ersten Ansatz sind in der Regel, aber ich möchte einige Meinungen von Ihrer Seite hören zuerst, ohne dass Sie mit meinen persönlichen Ansichten zu beeinflussen. Ich weiß, es existiert keine One-size-fits-all-Lösung und es hängt oft von vielen Faktoren ab, aber wir können darüber diskutieren.

Btw, sind wir im Rahmen von Web-Anwendungen (mit einer Oracle-DB) und unser aktueller Ansatz ist zu haben

  • UI-Schicht, die UI-Eingang akzeptiert und hat einen ersten, clientseitige Validierung
  • Business-Schicht mit einer Reihe von Service-Klassen, die die Geschäftslogik einschließlich der Validierung enthält für die Benutzereingabe (serverseitig)
  • Data Access Layer, die dafür persistency gespeicherte Prozeduren aus der DB-Aufrufen / Leseoperationen

Viele Menschen jedoch dazu neigen, das Business-Schicht Material (vor allem in Bezug auf die Validierung) bis auf die DB in Bezug auf den gespeicherten Prozeduren zu bewegen.

Was denken Sie darüber? Ich möchte diskutieren.

War es hilfreich?

Lösung

Ich habe nur einen Fall gesehen, wo Logik in dem gespeicherten Procs Sinn; im Grunde war es die Leistung bezogen werden: viele Daten zu bewegen und Crunch. Die Rettung war, dass die Logik nicht enorm komplex war - aber der SP war immer noch ein Alptraum. Es war zu langsam erachtet es in dem App-Code zu tun.

So bei einer Vermutung - das ist vielleicht ein 1 in 50+ Projekt senario

Sie definieren Faktoren sein werden:

  • Eigentümer: die (das System / Komponente) die Daten besitzt und die besitzt die Regeln / Logik, die für sie gelten? Wenn die Datenbank durch eine bestimmte Komponente „besessen“ ist, dann soll, dass die Business-Logik enthält als teh Datenbank nur ist es Repository; wenn die Datenbank ein Unternehmen in seinem eigenen Recht ist, dann könnte es ein Fall gibt zum Einkapseln der Logik dort auch. Sie können sogar eine subtilere Pause haben, wo bestimmte Entscheidungen an einem Ort gemacht werden und andere an anderer Stelle -. Trigger sind ein mögliches Beispiel, dass
  • Verwaltbarkeit. Logik in App-Code - viel besser testen Unterstützung, etc
  • Komplexität:. (In Verbindung mit Verwaltbarkeit) Logik in App-Code
  • Performance:., Wenn die Datenmengen groß sind, und App-Code ist zu langsam Sie gezwungen sein könnte, um es dort
  • Konsistenz: alle in App-Code - und hoffen, dass Sie keine Performance-Probleme haben. stellen Sie sicher Ausnahmen dokumentieren sehr gut.

Andere Tipps

, um die Daten zu haben hält sich Sane, ob jemand Ihre Anwendung verwenden, eine andere Anwendung oder ein SQL-Tool kann an sich wertvoll sein.

Wert Haben die nie NULL sein sollte? - gut, entwerfen die Datenbank, die Regel zu erzwingen. Haben Sie eine Beziehung zwischen zwei Tabellen, die immer existieren sollten? -. Gut, setzen Sie einen Fremdschlüssel in

Haben Sie Werte, die in Ihrer Problemdomäne eindeutig sein sollte? setzen gut, eine eindeutige Einschränkung in Haben Sie eine Zeichenfolge, die immer zwischen 6-10 Zeichen lang sein sollten -.? -. Gut, eine Check-Einschränkung hinzufügen

Diese sind alle einfach, leicht zu der Datenbank hinzuzufügen, und geben Ihnen ein Maß an Vertrauen, dass Ihre Anwendung wird umfallen nicht, wenn es versucht, etwas aus der Datenbank zu laden, dass jemand mit der Hand verstümmelt hat. Und zu einem gewissen Grad können sie als Business-Logik sein. (Schließlich sind Sie alle diese von konkreten Fakten über Ihre Problemdomäne abzuleiten).

So in diesem Ausmaß würde ich setzen diese Art von Geschäftslogik in der Datenbank. Ja, bis in der Anwendung, dann würden Sie ähnliche Kontrollen anwenden möchten, ein angenehmeres Benutzererlebnis. Aber ich habe lieber meine Bewerbung (als letztes Mittel) umfallen, wenn er versucht, etwas ungültig in die Datenbank zu setzen, als diese Tatsache zu entdecken, 6 Monate später.

Logik in der Datenbank ist ein Wartungs-Alptraum. In den Fällen, wo es wirklich gebraucht werden sollte man es dokumentieren, wirklich gut und legen Sie sie im Textformat zusammen mit dem anderen Quellcode.

Es saugt normalerweise aus verschiedenen Gründen. Wenn Sie objektorientiert arbeiten, dann gespeicherte Prozeduren nicht sind eaxactls einen guten Platz für Logik - weil Ihre Objekte dort nicht mehr vorhanden sind. Ein Objekt kann in mehreren Tabellen sein.

Zweiter. SQL ist eine freaking schlecht langauge Code komplexe Logik in Es ist einfach keine TDONE für das. - ein Grund, SQL Server ermöglicht SPs in .NET geschrieben werden. Versuchen Sie, einen Hash in SQL Berechnung und Sie werden verstehen, was ich meine - alle Arten von String manupulations sind ein weiterer Bereich. Schmutzige wie die Hölle.

SP im Allgemeinen ziemlich oft mit idiotischen Argumenten getan. Idiotisch wie die Argumente die Leute bringen, sie zu verteidigen ist einfach überhaupt nicht wahr. Frans Bourma hat eine Liste der am häufigsten verwendeten Täuschungen undeiner gute Erklärung, warum die Argumente sind meist dumme Geschwafel unter http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx - und ja, es ist diese Ebene der Idiotie (wie die Menschen nicht einmal Lesen über die Dokumentation oder denken, was sie eigentlich sagen, in allen Konsequenzen).

Ich habe persönlich begrenzten Systmes mit gespeicherten Prozeduren und die, die ich habe, sind: Begrenzte Komplexität, aber hohe Leistung. Im Grunde genommen keine Vererbung, da das Objektmodell einfach ist, die Transaktionslogik in der SP nicht zu komplex ist und ich brauche / möge extrem kleine Schließanlagen Geschwindigkeit, so bestimmte Operationen werden in Stored Procedures bewegt. Hinzu kommt, hat diese spezielle Anwendung ein sehr ungewöhnliches Objektmodell, aare zu (Objekte dynamisch aus verschiedenen Quellen strömte, nie aktualisiert, immer ersetzt, und alle Änderungen HAVE durch Dienstleistungen gehen und nicht auf dem Objekt durchgeführt werden - manchmal, weil eine Änderung "bittet" auf einem anderen Computer in einem anderen Land in anothe Organisation.

Ein gutes Beispiel ist ein Abrechnungssystem, die hohe Leistung ist (weil es Gewerke von vollautomatischen Handelssystemen Tracking). Die Logik in jedem SP ist nicht wirklich komplex, aber ich will so wenig SQL hin und her wie möglich haben.

Nun, schlechte Seiten von Stored Procedures sind auch viel Werkzeug weise. Es gibt keinen richtigen Test-Framework, keine spöttische frameowrk, Quellcodeverwaltung itnegration Art von wenig umständlich ist (aber machbar mit dem richtigen Tool-Set). Integrierte Debugging? Nun, mein großer Dank Microsoft und Visual Studio - das tatsächlich funktioniert (Breakpoint in Stored Procedure - wirklich schön).

Ich habe noch einen Ansatz zu sehen, eine Menge von gespeicherten Prozeduren verwenden, die nicht mit völlig borked Argumenten verteidigt wurde - auf der Ebene der tatsächlich eine Demonstration des Seins Ebene des Denkens „Mitarbeiter gefeuert werden soll“. Vielleicht gibt sie sind, aber ich habe sie nicht gesehen.

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