AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Units überkreuzt - ist das ok?

Ein Thema von Alallart · begonnen am 6. Jun 2023 · letzter Beitrag vom 7. Jun 2023
Antwort Antwort
Alallart

Registriert seit: 8. Dez 2015
155 Beiträge
 
#1

Units überkreuzt - ist das ok?

  Alt 6. Jun 2023, 15:22
Ich habe es bisher selbst noch nie gemacht, weiß aber, dass es geht - ich meine die die Units überkreuzt eintragen.

Um was geht es? Meine Unit1 ist inzwischen etwas voll. Deshalb dachte ich einige Teile in eine zweite Unit auszulagern (Unit2). In den Prozeduren wird aber auf einige Komponenten der Unit1 zugegriffen, zb ist die CheckBox1 Checked?

Damit ich die Prozeduren der Unit2 aufrufen kann, habe ich sie in Unit1 eingetragen. Damit aber in Unit2 auf die Komponenten der Unit1 zugegriffen werden kann, habe ich in Unit2 die Unit1 eingetragen.

Meine Frage ist: ist das Ok, oder kann es später zu Problemen kommen? Um was es mir geht ist letztendlich alles etwas übersichtlicher zu gestalten, also auf zwei oder drei Units aufzuteilen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Units überkreuzt - ist das ok?

  Alt 6. Jun 2023, 15:42
besser soweit trennen das man ohne Überkreuzbezug auskommt, auch wenn man 3 Units benötigt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Units überkreuzt - ist das ok?

  Alt 6. Jun 2023, 15:49
Technisch ist das zwar OK, aber für mich ein NoGo.
Auf lange Sicht endet das oft im Chaos und ist meiner Meinung nach ein Zeichen von schlecht strukturiertem Code.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: Units überkreuzt - ist das ok?

  Alt 6. Jun 2023, 15:50
Mit dem entsprechenden Design lässt sich so eine zyklischen Unit-Referenz in der Regel vermeiden. Obwohl sowas prinzipiell geht, versuche ich das weitestgehend zu vermeiden. Bei Projekten, in denen das über einen langen Zeitraum akzeptiert oder gar bewusst praktiziert wurde, kann das schon mal etwas aufwändiger werden. Bisher hat sich das Auflösen solcher Zyklen aber immer als vorteilhaft dargestellt. Deswegen würde ich hier gleich zu einem entsprechenden Design raten, bei dem keine Zyklen vorkommen.

Bill Meyer geht in seinem Buch Delphi Legacy Projects: Strategies and Survival Guide auf die Nachteile solcher UDC (Unit Dependency Cycles) ein. In einer Präsentation schreibt er:
Zitat:
Long Build Times
•At some point, large projects may begin to suffer long build times.
• These build times are the result of Unit Dependency Cycles (UDCs).
•A UDC is created when UnitA uses UnitB, which uses UnitA.
•In a large project with many UDCs, once the build times begin to
increase, the problem will multiply.
•UDC effect on builds is an exponential burden. The exponent is small,
but any exponent will eventually become a burden.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Alallart

Registriert seit: 8. Dez 2015
155 Beiträge
 
#5

AW: Units überkreuzt - ist das ok?

  Alt 6. Jun 2023, 16:08
Aus diesem Grund habe ich es bisher auch immer vermieden.

Allerdings will ich zu meiner Ehrenrettung sagen, dass ich nicht auf Prozeduren, Funktionen oder Variablen der Unit1 aus der Unit2 zugreife, sondern lediglich einige Prozeduren auslagere. Solche die in sich abgeschlossen sind und nicht auf andere Prozeduren zugreifen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Units überkreuzt - ist das ok?

  Alt 6. Jun 2023, 16:15
Es gibt auch viele, die möglichts alle Units zwanghaft in die Implementation schreiben (abgesehn wo es nicht anders geht, weil sie im Interface benötigt wrden).

Ich mach möglichst alles ins USES des Interfaces. (abgesehn, da wo absichtliche eine Kreuz-/Kreisreferenz nötig ist)
* hier weiß ich einmal wo es eine Kreuzung gibt
* und normal habe ich auch alle Units zusammenstehend, also sehe sofort was Alles eingebunden ist (ohne immer in zwei USES gucken zu müssen)

* außerdem sind in Initialization und in Class-Constructor immer alle Units des Interaces initialiert
* für Units in der Implementation kann die Initialisierung auch erst nach meiner Unit passieren
* bei Finalization und Class-Destructor andersrum, also fremde Units werden immer nach mir Finalisiert (ich kann sie bei mir also noch benutzen)

* Und steht dagegen alles in der Implementation, dann weiß niemand, ob es eine Kreutung gibt, oder nicht
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Units überkreuzt - ist das ok?

  Alt 6. Jun 2023, 17:32
Ja, ich finde auch, dass die Vorteile überwiegen, wenn man alles unter interface in die uses schreibt.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#8

AW: Units überkreuzt - ist das ok?

  Alt 7. Jun 2023, 13:38
Ja, ich finde auch, dass die Vorteile überwiegen, wenn man alles unter interface in die uses schreibt.
Bei mir auch so
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:57 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