Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Variablen-Übergabe zwischen zwei Units (https://www.delphipraxis.net/193059-variablen-uebergabe-zwischen-zwei-units.html)

H.Bothur 15. Jun 2017 16:20

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:
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);
Die Variante 1 ist logisch - hat aber eben in diesem Fallsieben Variable
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

Aviator 15. Jun 2017 16:25

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.

Mavarik 15. Jun 2017 16:45

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:
  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;
Mavarik

hoika 15. Jun 2017 16:49

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.

himitsu 15. Jun 2017 16:49

AW: Variablen-Übergabe zwischen zwei Units
 
Zitat:

Delphi-Quellcode:
procedure LeseDaten(const: KundenNummer: out: KundenSatz: TStringList);

Wenn, dann ohne OUT.
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).

SneakyBagels 15. Jun 2017 16:50

AW: Variablen-Übergabe zwischen zwei Units
 
Zitat:

ich würde eine Klasse statt Record nehmen.
Ob Klasse oder Record, da bin ich eher für Record. Warum weiß nicht nicht. Ist am Ende aber quasi dasselbe.
Was ich aber definitiv nicht nehmen würde, wäre ein Interface.

Mavarik 15. Jun 2017 16:58

AW: Variablen-Übergabe zwischen zwei Units
 
Zitat:

Zitat von SneakyBagels (Beitrag 1374614)
Was ich aber definitiv nicht nehmen würde, wäre ein Interface.

Ich würde NUR ein Interface nehmen und nie etwas anderes..

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

H.Bothur 15. Jun 2017 17:01

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

Fritzew 15. Jun 2017 17:02

AW: Variablen-Übergabe zwischen zwei Units
 
Zitat:

Zitat von Mavarik (Beitrag 1374616)
Zitat:

Zitat von SneakyBagels (Beitrag 1374614)
Was ich aber definitiv nicht nehmen würde, wäre ein Interface.

Ich würde NUR ein Interface nehmen und nie etwas anderes..

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

Ich sage es ja nicht gerne aber Mavarik hat zu 100% Recht.

mjustin 15. Jun 2017 17:14

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 00:49 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz