![]() |
Dreischichtige Anwendungsgestaltung
Hallo,
ich habe mal eine grundsätzliche Frage zur Gestaltung einer mehrschichtigen Anwendung im Praxisfall. Ich möchte also ein Programm entwickeln, indem die GUI-/Datenverarbeitungs-/DB-Logik getrennt von einander sind. Meine Idee war (ganz grob und aufs Relevante gekürzt): 1. Unit (DB-Logik): Diese Unit kommuniziert direkt mit dem DB-Server, schickt die SQL-Statements etc ab. Stellt also Methoden und Funktion zur Verfügung für die Kommunikation mit dem DB-Server. 2. Unit (Datenverarbeitung): Diese Unit schickt das SQL-Statement an die 1. Unit und erhält ein Ergebnis (ResultSet). Nun stelle ich mir das so vor, dass mein Programm für die einzelne Datenbank-Inhalte Objekte/Klassen/Records zur Verfügung stellt. Beispiel (!!) :
Code:
Nun packt diese Unit das Ergebnis in ein Record:
SQL-query: SELECT * FROM Debitoren WHERE id=123;
Delphi-Quellcode:
TKunde=record
sKundenNr:String[50]; sName:String[50]; . . . end;
Delphi-Quellcode:
3. Unit (GUI):
var BspKunde:TKunde
BspKunde.sKundenNr=ResultFromSQL.GetStringByName('Kundennummer') Diese Unit holt aus der 2. Unit das Objekt/Record etc. und füllt die GUI damit. Gleichzeit wird beim Abspeichern der Daten wieder ein Object/Record (vom Typ TKunde) gefüllt und an die 2. Unit übergeben (diese wiederum wandelt das Ganze in einen SQL-Statement [insert] um und schickt das an die 3. Unit, welches dann die DB-Kommunikaton auslöst.) Ich hoffe man versteht, was ich meine. Ist dieser Weg sauber und in Ordnung oder wie würdet Ihr es machen? Viele Grüße :-D |
AW: Dreischichtige Anwendungsgestaltung
Wenn Deine Units in ein und dem selben Programm sind sehe ich keinen Vorteil gegenüber direktem Zugriff (Dataset/Datasource/Datacontrol) sondern nur unnötigen Overhead.
Anders sieht das ganze aus wenn Du von einer Multitier Umgebung ausgehst. Mit einem Dienst der (verschieden) Datenquellen anzapft, die Datenlogik komplett abbildet und nach außen Schnittstellen für verschiedest Clients anbietet. Aber selbst da bin ich der Meinung dass Delphi hierfür nicht optimal geeignet ist, bzw. daß Du auf vieles verzichten musst was Delphi ansonsten von Haus aus mitbringt, ganz abgesehen von dem erheblichen Mehraufwand. |
AW: Dreischichtige Anwendungsgestaltung
Am besten ist es, wenn du die DataSource komponenten nutzt. Das ist schon eine relativ gute Trennung. Weiter würde ich nicht gehen.
PS: Ich habe diese Woche einen Thread zur Unitlänge angefangen. Die Unit mit 18k Zeilen hat in etwa den selben Grund. |
AW: Dreischichtige Anwendungsgestaltung
Zu TDataSource &Co. kann ich nicht viel sagen, weil ich die noch nicht benutzt hab. Aber ich kann
![]() mfg Christian |
AW: Dreischichtige Anwendungsgestaltung
Danke für die Antworten! Der Artikel ist wirklich klasse. Da ich mich persönlich auch nicht mit den DB-Controls auskenne, werde ich nochmal gut über den Artikel nachdenken. Ist ein wirklich guter Ansatz. Gefällt mir.
Gruß |
AW: Dreischichtige Anwendungsgestaltung
Hallo,
bitte schau dir diese beiden OPF/ORM an: ![]() ![]() die bieten alles das was Du dir selbst aus den Fingern saugen willst schon fertig an.... Zumindest InstantObjects sind relativ einfach. Spiel mit denen etwas herum. Je nach deinen Anforderungen könnte eines der beiden genügen. Wenn Du dann weiter Interesse an einer mehrschichtigen Anwendung hast, und das alles selber machen willst, dann schau dir das hier noch an: ![]() ![]() Und je nach Umfang deiner Anwendung loht der Aufwand schon - kann ich aus eigener Erfahrung sagen... Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz