AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Globale Variablen und Sichtbarkeit

Ein Thema von Amicello · begonnen am 15. Sep 2016 · letzter Beitrag vom 15. Sep 2016
Antwort Antwort
Benedikt Magnus

Registriert seit: 6. Jul 2012
Ort: Bonn
190 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Globale Variablen und Sichtbarkeit

  Alt 15. Sep 2016, 08:34
Zitat von Amicello:
Eine Unit greift hier auf die Funktionen der anderen zu - und natürlich umgekehrt, aber die Units gegenseitig in die Uses-Blöcke einzutragen ist natürlich Käse.
Zirkuläre Unitnutzung ist in einem Falle wie deinem durchaus angebracht. Das geht in Delphi, indem du nicht die Usesblöcke im interface-Abschnitt nutzt, sondern sie im implementation-Abschnitt einträgst. Wenn du im interface auf eine andere Unit zugreifst, dann natürlich im interface eintragen. Nur bei lediglich einer von beiden muss es im implementation-Teil sein. Zirkuläre Zugriffe im interface-Teil lassen sich aber in aller Regel vermeiden.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses
  Unit2, Unit3;

{$R *.dfm}

end.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Globale Variablen und Sichtbarkeit

  Alt 15. Sep 2016, 10:34
Du hast Logik und Darstellung ja schon getrennt. Fein.

Wie wär es, wenn TMainform die Instanzen der Klassen erstellt und sie an die anderen Formulare verteilt. Am besten gleich über den Konstruktor, (die automatische Erzeugung dieser Formulare dann aus den Projektoptionen heraus nehmen).

Beispiel:

Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
begin
  FSomeClass := TSomeClass.Create;
  Form2 := TForm2.Create(Self, FSomeClass);
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  FSomeClass.Free;
end;
In TForm2 überschreiben wir den Konstruktor der Form:
Delphi-Quellcode:
type
  TForm2 = class(TForm)
  private
    FSomeClass: TSomeClass;
  public
    constructor Create(AOwner: TComponent; const Value: TSomeClass); reintroduce; overload;
  end;

var
  Form2: TForm2;

implementation

{$R *.DFM}

constructor TForm2.Create(AOwner: TComponent; const Value: TSomeClass);
begin
  inherited Create(AOwner);
  FSomeClass := Value;
end;
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.055 Beiträge
 
Delphi 12 Athens
 
#3

AW: Globale Variablen und Sichtbarkeit

  Alt 15. Sep 2016, 11:22
Zirkuläre Unitnutzung ist in einem Falle wie deinem durchaus angebracht.
Möglich ist das sicher, aber angebracht oder sinnvoll nicht. Denn dadurch verzahnt man Code miteinander viel zu sehr. Dadurch ist er dann kaum testbar oder wartbar.
Denn wie willst du Code sinnvoll testen, der nicht eine Eingabe bekommt und ein Ergebnis liefert, sondern der auf einer GUI etwas mit einem Control macht?
(Klar muss man auch so etwas testen, aber das ist dann nicht die Businesslogik, sondern die GUI-Logik.)

Wie es sauber geht hat BUG ja oben schon geschrieben, mit Interfaces.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort

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 11:27 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