Einige meiner Kollegen haben mir mitgeteilt, dass das Vorhandensein von Geschäftslogik in gespeicherten Prozeduren in der Datenbank die dreistufige Trennungsarchitektur verletzt, da die Datenbank zur Datenschicht gehört, während gespeicherte Prozeduren Geschäftslogik sind.
Ich denke, die Welt wäre ein sehr düsterer Ort ohne gespeicherte Prozeduren.
Verstoßen sie wirklich gegen die dreistufige Trennung?
business-logic
n-tier
layers
stored-procedures
separation-of-concerns
Tulains Córdova
quelle
quelle
Antworten:
Ihre Kollegen verbinden Architektur mit Implementierung.
Die Idee hinter einer mehrschichtigen Anwendung ist einfach, dass sie in Teile zerlegt ist, die bestimmte Arten der Verarbeitung (Speicherung, Geschäftslogik, Präsentation) einschließen und über gut definierte Schnittstellen miteinander kommunizieren. So wie es möglich ist, Dinge, die einer objektorientierten Programmierung ähneln, in nicht-objektorientierten Sprachen erfolgreich durchzuführen, ist es auch möglich, dasselbe mit mehreren Ebenen in einer Umgebung, z. B. einem Datenbankserver, zu tun. Beiden gemeinsam ist die Notwendigkeit von Sorgfalt, Disziplin und Verständnis für die damit verbundenen Kompromisse.
Schauen wir uns eine dreistufige Anwendung an, bei der zwei der Ebenen in einer Datenbank implementiert wurden:
INSERT
,UPDATE
,DELETE
undSELECT
).Dies ist ein durchaus akzeptables Modell, das jedoch einige Nachteile mit sich bringt. Die Geschäftslogik ist so implementiert, dass sie einen schnellen und einfachen Zugriff auf die Datenebene ermöglicht und möglicherweise Dinge ermöglicht, die von einer Logikebene außerhalb der Datenbank "auf die harte Tour" ausgeführt werden müssten. Was Sie aufgeben, ist die Möglichkeit, auf einfache Weise eine der beiden Ebenen auf ein anderes technologisches Element zu verlagern und diese problemlos zu implementieren (dh Sie müssen besonders darauf achten, dass die Ebenen keine in der Datenbank verfügbaren Funktionen verwenden, die sich jedoch außerhalb ihrer definierten Schnittstellen befinden). .
Ob diese Art von Dingen und die damit verbundenen Kompromisse in einer bestimmten Situation akzeptabel sind, müssen Sie und Ihre Kollegen anhand Ihres Urteils feststellen.
quelle
SELECT
direkt aus Tabellen (der Datenschicht) stammt, wurde das Modell beschädigt.Gespeicherte Prozeduren sind leistungsstark genug, um einen Verstoß gegen die dreistufige Trennung zu codieren, indem Geschäftslogik in die RDBMS-Schicht übernommen wird. Dies ist jedoch Ihre Entscheidung und kein inhärenter Fehler gespeicherter Prozeduren. Sie können Ihre SPs auf die Erfüllung der Anforderungen Ihrer Datenschicht beschränken, während Ihre Anwendungslogik in der Anwendungsschicht Ihrer Architektur bleibt.
Es gibt eine seltene, aber wichtige Ausnahme von der Trennungsregel, wenn Sie gespeicherte Prozeduren (insbesondere eine Gruppe von Triggern) zum Enthalten von Geschäftslogik benötigen. Dies ist der Fall, wenn Ihre Anwendung viele spontane Datenaggregationen erstellen muss, die Millionen von Zeilen betreffen. In solchen Fällen können Trigger eingerichtet werden, um voraggregierte Daten für die Verwendung der Business-Schicht zu verwalten. Dies sollte nur in Situationen erfolgen, in denen Ihre Anwendung ohne Voraggregation unannehmbar langsam ist.
quelle
Der Rat von Atwood aus dem Jahr 2004 ist bis heute gültig, nur haben wir jetzt auch den Vorteil von ORM.
http://blog.codinghorror.com/who-needs-stored-procedures-anyways/
quelle
Kurze Zusammenfassung: Es hängt wirklich von der Verwendung der gespeicherten Prozeduren und den Geschäftsanforderungen ab.
Es gibt eine Reihe von Projekten, die eine dreistufige Architektur verwenden, und je nach Art der Geschäftsanforderungen müssen möglicherweise einige Vorgänge auf eine Datenebene verlagert werden .
Apropos Terminologie, in allgemeinen Worten, diese Ebenen beschrieben als:
Normalerweise besteht die mittlere Schicht oder die Schicht der Geschäftsdienste für die angegebene Architektur aus Geschäfts- und Datenregeln. Manchmal macht es jedoch einen großen Unterschied, schwere Basisoperationen und / oder Datenregeln, die in der Datenschicht ausgeführt werden sollen, durch gespeicherte Prozeduren zu verschieben.
Die Vorteile dreistufiger Designs sind:
Es ist also wirklich ein fallbasierter Ansatz, der Kompromisse in sich birgt. In den Microsoft-Entwurfsrichtlinien für das dreistufige Architekturmodell wird jedoch empfohlen, die Geschäftslogik auf der mittleren Ebene zu belassen.
quelle
Schicht bedeutet tatsächlich unterschiedliche Maschine, Schicht bedeutet unterschiedliche logische Trennung. Bei gespeicherten Prozeduren befinden sich die Datenschicht und (zumindest ein Teil davon) die Geschäftslogikschicht auf derselben Ebene. Das Einfügen der Geschäftslogik in die gespeicherten Prozeduren verletzt die dreischichtige Architektur, ist jedoch fraglich, ob sie eine dreischichtige Architektur verletzt. Eine sichere Sache ist, dass es kein gutes Beispiel für die Trennung von Bedenken ist.
Meiner Meinung nach gibt es zwei Hauptprobleme beim Erstellen der Geschäftslogik in der Datenbank:
Code und Bibliotheken: Sie werden weniger Programmierer finden, die in der Lage sind, in SQL, PL / SQL, TSQL usw. zu programmieren als in C #, Java usw. Programmiersprachen haben auch den Vorteil großartiger IDEs, großartiger Bibliotheken und Frameworks.
Horizontale Skalierbarkeit: Sie können Ihr System nur skalieren, indem Sie den physischen Server, auf dem sich die Datenbank befindet, durch einen leistungsstärkeren Server ersetzen, der ziemlich teuer ist (ein Server mit 64 GB RAM). relationale Datenbanken lassen sich horizontal sehr schlecht skalieren, und das sogar mit höheren Kosten. Während mit Geschäftslogik in OO-Servern eine horizontale Skalierung möglich ist, können Sie den Server auf viele Knoten stellen (in Java wird dies von vielen Anwendungsservern unterstützt).
quelle
Wir hatten diese Debatte vor einiger Zeit in unserem Büro, ich habe die Datenbankentwicklung favorisiert, ich habe folgende Ansicht dazu
Das stärkste Argument der Anwendungsentwickler ist, dass die Geschäftslogik unabhängig von der Datenbank sein sollte, damit Sie die Datenbank problemlos ändern können. Ich denke, wenn ein Unternehmen Oracle verwendet, warum es stattdessen auf eine andere Technologie umsteigt, sind die Chancen, dass die Anwendungslogik veraltet ist, größer. Das Problem ist, dass meistens neue Talente der Datenbankressource fehlen. Meistens beginnen die Leute mit einfachen Websites, auf denen sie MySQL oder SQLServer verwenden. Diese Jungs werden dann zu Senior-Leads und haben eine emotionale Bindung zur Anwendungsebene :) Sie wollen nicht einmal verstehen oder debattieren.
quelle