AGB  ·  Datenschutz  ·  Impressum  







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

F2047 Zirkuläre Unit-Referenz ?

Ein Thema von daredd · begonnen am 24. Nov 2008 · letzter Beitrag vom 28. Nov 2008
Antwort Antwort
Seite 2 von 3     12 3      
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 26. Nov 2008, 10:53
Es geht in Delphi ja. Ist aber ( auch in C# usw. ) nicht sauber.
Markus Kinzler
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#12

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 26. Nov 2008, 16:11
Zitat von omata:
Nur weil etwas geht ist es noch lange nicht sinnvoll.

Die Hinweise, die hier gegeben wurden sind zwar richtig, allerdings nicht sinnvoll.
Solche Zirkelschlüsse sind niemals nötig, wenn man so etwas braucht, hat man etwas grundlegendes falsch gemacht.
Hi omata,

das zirkuläre Bezüge grundsätzlich zu vermeiden sind, aus allen hier benannten Gründen und noch vielen mehr, ist unbestritten. Zu behaupten, dass das nicht sinnvoll ist halte ich aber für Falsch. Leider läßt sich das auch bei sauber Strukturierung nicht immer vermeiden.

Ein Beispiel:

Du proggst ein eigenes Control, dass auf seiner Oberflächen einen Button für ein eigenes Property-Form hat. Somit beinhaltet die Unit in der du deine Komponente schreibst einen Bezug auf die Property-Form-Unit. Diese benötigt jetzt aber einen Bezug auf deine Komponenten, wenn sofort nach dem ändern eines Wertes die Komponente direkt aktualisiert werden soll ohne das Fenster zu schließen.

Dann bin ich gezwungen die Unit der Form im Implementationteil einzubinden, da das Formular ja durch die Komponente kreiert wird. Die Unit der Komponente binde ich im interface-Teil der Form ein, da ich die Instanz des Controls für die Wertezuweisung im Formular brauche.

Die zirkulären Bezüge in diesem Bsp. sind glücklicherweise überschaubar und imho zu verkraften. Wenn du da eine bessere Lösung anbieten kannst, schau ich mir gerne an.

Gruß oki
42
  Mit Zitat antworten Zitat
mjustin

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

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 26. Nov 2008, 16:53
Zitat von mkinzler:
Es geht in Delphi ja. Ist aber ( auch in C# usw. ) nicht sauber.
Es geht, wenn man immer alles in eine einzige Unit packt

Wenn man jede Klasse in eine eigene Unit packt, und die Klassen sich wechselseitig referenzieren, weil das halt im Objektmodell (fachliches oder Domänenmodell) so ist, kommt man in Delphi leider nur mit Klimmzügen ans Ziel.
Sauber sind gegenseitige Bezüge im Prinzip schon, und in C#, Java und anderen Sprachen mit später Bindung zum Glück auch problemlos möglich.

Anderes Beispiel: es gibt keinen Weg, das Visitor-Pattern der Gang of Four zu implementieren, wenn die beteiligten Klassen in verschiedenen Units stehen, und man ohne Typecasts arbeiten will.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#14

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 26. Nov 2008, 17:02
... und selbst mit Typecast muss die Klasse bekannt sein und somit die Unit in der sie definiert ist eingebunden werden.

Gruß oki
42
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 26. Nov 2008, 19:58
Zitat von oki:
Du proggst ein eigenes Control, dass auf seiner Oberflächen einen Button für ein eigenes Property-Form hat. Somit beinhaltet die Unit in der du deine Komponente schreibst einen Bezug auf die Property-Form-Unit. Diese benötigt jetzt aber einen Bezug auf deine Komponenten, wenn sofort nach dem ändern eines Wertes die Komponente direkt aktualisiert werden soll ohne das Fenster zu schließen.
Ich würde ja gerne etwas genaueres dazu sagen, allerdings erschliesst sich mir diese Gedankenwelt leider nicht.

Deshalb ganz kurz: Ich würde da eigene Events für schreiben, dann ist auch hier kein Zirkelschluss nötig.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#16

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 26. Nov 2008, 21:16
Hi omata,

ok, dann mit Events, Kein Problem. Und welche Klassenreferenz übergibst du dann um eine spezielle Eigenschaft deiner Klasse zu setzen?

Gruß oki
42
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 26. Nov 2008, 21:30
Zitat von oki:
Und welche Klassenreferenz übergibst du dann um eine spezielle Eigenschaft deiner Klasse zu setzen?
Self, oder Referenzparameter über den Methodenzeiger.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#18

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 26. Nov 2008, 21:42
Sorry omata, ich glaube wir reden aneinander vorbei. Gib mal ein Beispiel für deine Version.

Hier meine:
Delphi-Quellcode:
unit MyClasses;

interface

type
  TCustomClass = class(TCustomControl)
....


implementation

uses CustomPropertyForm;

...
procedure TCustomClass.ShowPropertyForm;
var PropForm : TPropertyForm;
begin
  PropForm := TPropertyForm.create(nil);
  PropForm.Item := self;
  PropForm.Show;
end;
Delphi-Quellcode:
unit CustomPropertyForm;

interface

uses MyClasses;

type
  TPropertyForm = class(TForm)
  ...
  public
    property Item : TCustomClass read FItem write SetItem;
  ...
Gruß oki
42
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 26. Nov 2008, 22:05
Natürlich kannst du hier ein Minimalbeispiel liefern, indem du so einen starken Knebel ansetzt, so dass man da gar keinen anderen Ausweg, als einen Zirkelschluss sieht.
Aber das war ja gerade mit "grundlegend" gemeint, kann man das was man erzeugen will auch strukturiert realisieren? Das war und ist die Intention, und da kann man ganz klar sagen, das geht und zwar immer. Es muss keine Frikellösung her. Das ist nicht nötig. Natürlich muss man dann einen Moment länger über die Lösung nachdenken.

Also muss hier erstmal klar werden, was im Großen möglich sein soll, sonst kann hier natürlich keine sinnvolle Lösung gezeigt werden.

Zum Beispiel: Warum kann die Property auch überschrieben werden? Wäre es da nicht besser den Kontruktur zu überschreiben und den Item somit fest zu initialisieren und nur einen lesenden Zurgiff von außen zu gestatten? Aber das soll jetzt nicht vom eigentlichen Problem ablenken.

Ich muss zugeben, ich sehe noch keinen Sinn in dieser Struktur, das liegt aber wohl nur daran, dass ich bis jetzt solch eine Struktur nicht benötigt habe. Oder aber es liegt einfach daran, dass ich solche Strukturen anders löse und deshalb gar nicht weiss, dass dies hier jetzt eine solche, gewünschte Struktur erfordert.

Also, es kann sehr gut sein, dass wir aneinander vorbeireden.

Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#20

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 27. Nov 2008, 02:41
hier gibts eine recht praktikable Lösung für Sonderfälle, wo es sich mal nicht vermeiden lässt, oder wo einzelne Klassen mal doch nicht hierarchisch gestaltet werden wollen ..


http://www.delphipraxis.net/internal...highlight=unit
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 21:51 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