![]() |
AW: 3 Schichtversuch
Das Problem mit "getrennten" Schichten seh ich hier
Delphi-Quellcode:
Da verschwimmen alle 3 Schichten zusammen aber eigentlich sollten alle 3 Schichten klar getrennt sein. Ich frage mich nur, wie trenn ich das jetzt sauber?
// Button Vertrag suchen
procedure TForm1.ButtonVSuchenClick(Sender: TObject); var stmp : string; begin stmp := ''; if (DBVertrag.Suchen(ADOQuery = true)) then begin stmp := ADOQuery.FieldByName('VERTRAGSNR').Value; Vertrag.SetVertragsNummer(stmp); EditVVertragsNr.Text := Vertrag.GetVertragsNummer; end; end; Irgendwie muß ja Die Vertragsnummer "sauber" von der DB (ADO) Schicht über die Mittelschicht zum Frontend kommen. |
AW: 3 Schichtversuch
Wieso suchst Du nicht über die Vertrags-Klasse?
BTW: Bitte nicht mit true/false vergleichen, das ist ein immer wieder aufkommendes Thema. |
AW: 3 Schichtversuch
Also währe das so sauberer?
Delphi-Quellcode:
Vertrag.Suchen leitet die Anfrage weiter an die DB(ADO)-Schicht, von dieser wird dann mit "Set" die Vertragsnummer im Objekt Vertrag aus der Query gesetzt(übertragen) und hier bei ButtonSuchen letztendlich an das Frontend weitergegeben.
// Button Vertrag suchen
procedure TForm1.ButtonVSuchenClick(Sender: TObject); begin Vertrag.Suchen; EditVVertragsNr.Text := Vertrag.GetVertragsNummer; end; |
AW: 3 Schichtversuch
Japp. Die Präsentationsschicht kennt (im Idealfall) nur die Logikschicht und diese wiederum nur die Datenhaltungsschicht.
|
AW: 3 Schichtversuch
Ok vielen Dank für die Info :thumb:
|
AW: 3 Schichtversuch
Hallo,
hab mich mal weiter an den Feinheiten der OOP versucht und bin da auf folgendes gestoßen. Und zwar vererbe ich an die Logikschicht die DB-Zugriffsschicht, auf deren Methoden wie hier z.B. speichern nur die Logikschicht zugreifen kann. Damit die Methode der DB-Schicht nur für die Logikschicht sichtbar ist habe ich "strict protected" angewand (strict protected - hierauf kann man nur innerhalb der Klasse und ihrer Nachfahren zugreifen ) Allerdings kommt beim compilieren die Fehlermeldung das nicht auf "proteced Symbol Speichern" zugegriffen werden, die garnicht zu der Beschreibung paßt, da ja die Logikschicht der Nachfahre von TDBVertrag ist. Vorher hatte ich probiert die DB-Schicht als Nachfahren der Logikschicht anzugeben, aber das würde dann auch nicht zu der Beschreibung von strict protected paßen, da die Logikschicht auf eine Methode des Vorfahren zugreifen muß, damit die Daten in der DB-Schicht landen.
Code:
type
TDBVertrag = class strict private { strict Private-Deklarationen } // Felder // Methoden strict protected { strict Protected-Deklarationen } // Felder // Methoden procedure Speichern(qry : TADOQuery); virtual; protected private { Private-Deklarationen } public { Public-Deklarationen } end; |
AW: 3 Schichtversuch
Hab das Problem schon gefunden. Habe .Speichern direkt über die DB-Instanz aufgerufen anstatt über die geerbte Methode.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:18 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