2016-06-21 11 views
2

Ich implementiere derzeit ein System und ich habe eine Frage bezüglich der Interaktion zwischen verschiedenen Elementen im System mit der Klasse, die direkt mit der Datenbank interagiert (die eine öffnende und schließende Verbindung, Ausführung) SQL-Abfragen, usw.).Interaktion zwischen Business-Logik-Layer und Datenbankzugriffsschicht

Meine Business Logic Layer verzögert bisher die Konstruktion von alle SQL-Abfragen (abhängig von bestimmten Eingaben) zu meiner Datenbankzugriffsschicht, die wiederum die Datenbankhandhabungsklasse aufrufen würde, um jede Abfrage auszuführen. Beachten Sie, dass direkt über meiner Business-Logik-Ebene die GUI ist.

Die Frage ist: wäre es eine schlechte Praxis, die Konstruktion von SQL-Abfragen in die Business-Logik-Schicht aufzunehmen? Ich frage das, weil ich eine Prozedur implementieren muss, die Daten von Datenbank DB1 erhält, manipuliert, und dann schreibt es in DB2. Daher finde ich, dass das Hardcoding dieser SQL-Abfragen in meiner Business-Schicht einfacher zu halten wäre.

Bitte lassen Sie mich Ihre Gedanken und wenn dies ein sauberes Design in gewissem Maße aus einer architektonischen Sicht ist, oder wenn ich diese Logik alle in meiner Datenbank Access Layer einschließen sollte.

+1

Sie haben eine Abhängigkeit vom tatsächlichen Datenspeicher eingeführt. Wenn es immer SQL ist, dann OK, aber Sie haben die DAL verletzt. – Paparazzi

Antwort

1

wäre es eine schlechte Übung, die Konstruktion von SQL-Abfragen in die Business Logic-Schicht aufzunehmen?

Am wahrscheinlichsten. Die Business-Schicht sollte im Allgemeinen datenbankunabhängig sein.

Ich brauche ein Verfahren zu implementieren, die Daten aus der Datenbank DB1 wird manipuliert, und dann schreibt sie in DB2

Sie müssen also zwei Datenschicht Objekte - man die Daten von DB1 zu erhalten und eine, um es in DB2 zu speichern. Die "Manipulation" kann an jedem Ort (Business-Layer oder Daten-Layer) erfolgen, abhängig von der Natur der Manipulation.Handelt es sich beispielsweise um eine reine Datenkonvertierung oder um andere Aspekte der Business-Schicht?

+0

es hängt weitgehend von der Manipulation von Daten auf der Grundlage einiger Analysen, also nicht nur einfach Datenkonvertierung. – Adam

+0

Dann kann die Business-Schicht für den Konvertierungsaspekt geeignet sein. –

+0

das bedeutet, dass ich zwei Instanziierungen der DAL-Klasse haben sollte, oder sollte ich zwei verschiedene DAL-Klassen definieren, eine für jede Datenbank (sie hätten etwas andere Funktionen, nehme ich an)? – Adam

0

Sie müssen diese Logik nicht auf die Business-Ebene anwenden.

Folgen dieser Schritte

  1. Anfrage Daten von DB1 aus der Business-Schicht
  2. Data Access Layer die Daten aus DB1 zu Business Layer
  3. die Daten in Business Layer Manipulieren zurückgibt. (Berechnungen, Umwandlungen und was nicht)
  4. Anfrage die Daten Acess-Layer diese neuen Daten zu DB2 einfügen und übergeben entlang der verarbeiteten Daten zu Data Access Layer
  5. Data Access Layer schreibt DB2

Auf diese Weise ist eleganter und Sie können Ihre aktuelle Architektur unverändert beibehalten.

EDIT

Sie können für den Zugriff auf DB2 eine separate Data Access Layer erstellen und die Schicht auf Schritt rufen Geschäft 4. So können Sie Datenzugriffsschichten kohärenter halten können.