![]() |
Delphi-Version: 10 Berlin
Variablen-Übergabe zwischen zwei Units
Moin,
ich bin mir gerade unsicher wie man es "richtig" macht :-) Ich habe: Programmunit (MainUnit) die ein ClientDataSet und eine Datenbank hat (CSV-Daten in Dataset importiert) eine zweite Unit die auch eine Datenbank ansteuert. Jetzt sollen per procedure Daten aus der zweiten Datenbank in die erste kopiert werden jetzt gibt es für mich drei Varianten:
Delphi-Quellcode:
Die Variante 1 ist logisch - hat aber eben in diesem Fallsieben Variable
procedure LeseDaten(const: KundenNummer: out: Name1, Name2, Strasse, PLZ, Ort, Telefon, Telefax: String);
procedure LeseDaten(const: KundenNummer: out: KundenSatz: TStringList); procedure LeseDaten(const: KundenNummer: out: KundenSatz: KundenRecord); bei Variante 2 ist der Aufruf schön klar - ich muss aber erst alles in die StringList packen bei Variante 3 ist der Aufruf auch schön klar - da muss ich aber erst alles in den record packen Was ist denn in so einem Fall "State of the Art" ?? Gruß Hans |
AW: Variablen-Übergabe zwischen zwei Units
Ich glaube StateOfTheArt gibt es in dem Fall nicht wirklich. Aber am ehesten würde wohl Variante 3 mit dem Record oder als Instanz einer entsprechenden Klasse bzw. eines Interfaces gewählt werden. Vorteil dabei im Gegensatz zu Variante 1 ist, dass die Klasse/der Record erweitert werden könnte, sich aber an allen Stellen im Code, an dem die Klasse/der Record übergeben wird, nichts ändern würde.
Also meine Wahl wäre Variante 3 bzw. 4 mit Klassen. |
AW: Variablen-Übergabe zwischen zwei Units
Also ich würde ein
IDataview<TKunde> übergeben... Als Wrapper für eine TKunden Classe die ein Interface hat für das LiveTime-Management. Das / Die Interfaces sehen dann so aus:
Delphi-Quellcode:
Mavarik
IDataView<T> = interface
function GetData : T; function Reload : IDataView<T>; property Data : T read GetData; end; IDataViewList<T> = interface( IDataView < TList <T> > ) function ReloadList : IDataViewList<T>; end; IPagedDataViewList<T> = interface( IDataViewList<T> ) function ReloadPage: IPagedDataViewList<T>; function GetFirst: IPagedDataViewList<T>; function GetPrevious: IPagedDataViewList<T>; function GetPage( const PageIndex: Integer ): IPagedDataViewList<T>; function GetNext: IPagedDataViewList<T>; function GetLast: IPagedDataViewList<T>; function GetCount: Integer; function GetCurrent: Integer; property Count: Integer read GetCount; property Current: Integer read GetCurrent; end; |
AW: Variablen-Übergabe zwischen zwei Units
Hallo,
ich würde eine Klasse statt Record nehmen. Derjenige, der die Daten haben will (Aufrufer) erzeugt die Klasse und gibt sie danach auch schön wieder frei. |
AW: Variablen-Übergabe zwischen zwei Units
Zitat:
Du gibst eine Instanz rein und die Funktion füllt sie nur. Und nimm TStrings als Parameter, dann kann man irgendeinen TStrings-Nachfahren übergeben und ist nicht gezwungen immer nur TStringList zu nehmen. z.B. Memo.Lines (das ist intern ein TMemoStrings). |
AW: Variablen-Übergabe zwischen zwei Units
Zitat:
Was ich aber definitiv nicht nehmen würde, wäre ein Interface. |
AW: Variablen-Übergabe zwischen zwei Units
Zitat:
Zum einen kauft man sich das Reference-Counting zum 2. ist man von der Implementation unabhängig und kann die Units entkoppeln, was auch die Unitstests einfacher macht. Mavarik |
AW: Variablen-Übergabe zwischen zwei Units
Hi Maverick,
gute Idee - aber ... für mich ist das zu hoch :-( Mit Records habe ich schon mal gearbeitet - bei dem was Du geschrieben hast kann ich gerade mal raten was wofür sein kann. Da müsste ich viel mehr noch lernen. Trotzdem - Vielen Dank !!! Hans |
AW: Variablen-Übergabe zwischen zwei Units
Zitat:
|
AW: Variablen-Übergabe zwischen zwei Units
Zwei Parameter sind zu viel :)
Delphi-Quellcode:
type
IKunde = interface ... function LeseDaten(const KundenNummer: string): IKunde; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 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-2025 by Thomas Breitkreuz