AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Variablen-Übergabe zwischen zwei Units

Ein Thema von H.Bothur · begonnen am 15. Jun 2017 · letzter Beitrag vom 18. Jun 2017
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
252 Beiträge
 
Delphi 11 Alexandria
 
#1

Variablen-Übergabe zwischen zwei Units

  Alt 15. Jun 2017, 16:20
Delphi-Version: 10 Berlin
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
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Variablen-Übergabe zwischen zwei Units

  Alt 15. Jun 2017, 16:25
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.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Variablen-Übergabe zwischen zwei Units

  Alt 15. Jun 2017, 16:45
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Variablen-Übergabe zwischen zwei Units

  Alt 15. Jun 2017, 16:49
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.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.110 Beiträge
 
Delphi 12 Athens
 
#5

AW: Variablen-Übergabe zwischen zwei Units

  Alt 15. Jun 2017, 16:49
Zitat:
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).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#6

AW: Variablen-Übergabe zwischen zwei Units

  Alt 15. Jun 2017, 16:50
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.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Variablen-Übergabe zwischen zwei Units

  Alt 15. Jun 2017, 16:58
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
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
252 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Variablen-Übergabe zwischen zwei Units

  Alt 15. Jun 2017, 17:01
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
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Variablen-Übergabe zwischen zwei Units

  Alt 15. Jun 2017, 17:02
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.
Fritz Westermann
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#10

AW: Variablen-Übergabe zwischen zwei Units

  Alt 15. Jun 2017, 17:14
Zwei Parameter sind zu viel

Delphi-Quellcode:
type
  IKunde = interface
  ...
  
function LeseDaten(const KundenNummer: string): IKunde;
Michael Justin
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:45 Uhr.
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