AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi überkreuzender Bezug von Units .. kleiner Workaround
Thema durchsuchen
Ansicht
Themen-Optionen

überkreuzender Bezug von Units .. kleiner Workaround

Ein Thema von stoxx · begonnen am 24. Sep 2007 · letzter Beitrag vom 26. Sep 2007
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#11

Re: überkreuzender Bezug von Units .. kleiner Workaround

  Alt 26. Sep 2007, 08:17
Zitat von alzaimar:
Ah. Na dann ... Ist die Aufteilung in Units falsch. Beide Klassen gehören, da untrennbar miteinander verbunden, auch zusammen.
Ist nicht immer machbar. Ich hab z.B. eine Form, auf der zur Laufzeit unterschiedliche Kind-Frames plaziert werden. Parentform und aktueller Frame müssen sehr viel voneinander wissen, aber, da visuell designt, in unterschiedlichen Units sein.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#12

Re: überkreuzender Bezug von Units .. kleiner Workaround

  Alt 26. Sep 2007, 08:27
Zitat von uligerhardt:
Zitat von alzaimar:
Ah. Na dann ... Ist die Aufteilung in Units falsch. Beide Klassen gehören, da untrennbar miteinander verbunden, auch zusammen.
Ist nicht immer machbar. Ich hab z.B. eine Form, auf der zur Laufzeit unterschiedliche Kind-Frames plaziert werden. Parentform und aktueller Frame müssen sehr viel voneinander wissen, aber, da visuell designt, in unterschiedlichen Units sein.
Das klingt mir nach falschem Design. Das klingt danach als ob Oberfläche und Funktionalität vermixt wurden. Ansonsten bildet man die ganze Funktionalität in nicht visuellen Objekten ab und per Events kann man die Oberfläche über Änderungen Informieren. Umgekehrt kann bei Eingabe über die Gui eine Methode der nicht visuellen Objekte aufgerufen werden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#13

Re: überkreuzender Bezug von Units .. kleiner Workaround

  Alt 26. Sep 2007, 08:35
Dann löse dieses Dilemma mit Events. So ein Frame muss doch nicht wissen, das es auf einer TFoobarForm ist. Wozu dann ein Frame? Der Sinn eines Frames ist doch, das man es wieder verwenden kann. Aber so sind die beiden Klassen wirklich untrennbar verbunden.

Es ist doch bestimmt so, das dein Hauptformular irgendetwas machen muss, wenn sich im Frame Daten ändern. Und Du veränderst die Daten der Hauptform im Code/Kontext des Frames.

Es ist praktischer, wenn das Frame seinem Eigentümer (oder wer auch immer das wissen will), Bescheid gibt, wenn sich etwas ändert. Dann kann der Eigentümer angemessen darauf reagieren, das Frame muss gar nichts über ihn wissen und alle (vor allen Dingen die OOP-Gemeinde) sind zufrieden.

Du kannst das dann sehr leicht mit Events lösen:
Spendiere dem Frame ein Event 'OnDataChanged' mit einem Parameter, der besagt, WAS geändert wurde, etwa so:

Delphi-Quellcode:
Type
  TDataOnFrameChangedEvent = Procedure (Sender : TObject; aControl : TControl);
Und dann weist Du jedem OnChange-Event deiner Eingabefelder auf dem Frame diese Methode zu:
Delphi-Quellcode:
Procedure TMyFrame.DataOnFrameChanged (Sender : TObject);
Begin
  If Assigned (fDataOnFrameChanged) And (Sender Is TControl) Then
    fDataOnFrameChangedEvent (Self, TControl (Sender));
End;
In Deinem Hauptformular erzeugst Du dir so eine Methode, implementierst *dort* die vorzunehmenden Aktionen und weist im FormCreate dem Frame-Ereignis diese Methode zu:
Delphi-Quellcode:
Procedure TMyMainForm.ReactOnDataChanged (Sender : TObject; aControl : TControl);
Begin
  If Sender = frmMyFrame Then
    If aControl = frmMyFrame.edVorname Then
      ShowMEssage(Format ('Der Vorname wurde in %s geändert',[TEdit (aControl).Text]));
End;

Procedure TMyMainForm.FormCreate (Sender : TObject);
Begin
  ...
  frmMyFrame.OnDataOnFrameChangted := ReactOnDataChanged
End;
Wenn sich im Frame nun etwas ändert, wird immer die Methode 'ReactOnDataChanged' über den Event-Mechanismus aufgerufen.

Ich finde diese Lösung auch deswegen besser, weil alle Aktionen, die Du im Hauptformulat in Abhängigkeit des Frames ausführst, in der Methode 'ReactOnDataChanged' konzentriert und an einer Stelle implementiert sind. Das ist übersichtlich und einfacher wartbar.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#14

Re: überkreuzender Bezug von Units .. kleiner Workaround

  Alt 26. Sep 2007, 08:41
Zitat von SirThornberry:
Das klingt mir nach falschem Design. Das klingt danach als ob Oberfläche und Funktionalität vermixt wurden. Ansonsten bildet man die ganze Funktionalität in nicht visuellen Objekten ab und per Events kann man die Oberfläche über Änderungen Informieren. Umgekehrt kann bei Eingabe über die Gui eine Methode der nicht visuellen Objekte aufgerufen werden.
Es geht durchaus um echte GUI-Funktionalität, die zwischen Form und Frame koordiniert werden muss - Toolbars "mergen", Größenanpassungen usw.usf. Hab oft und lange überlegt, wie ich das besser trennen könnte, bin aber nie auf die "perfekte" Lösung gekommen.
FTR: Meine Frames implementieren mittlerweile ein Interface, über das die Form ihre Funktionalität aufruft. Das Interface ist aber zu "ad hoc" für meinen Geschmack aufgebaut - riecht ziemlich nach Workaround. Andererseits: es funktioniert.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#15

Re: überkreuzender Bezug von Units .. kleiner Workaround

  Alt 26. Sep 2007, 08:49
Zitat von alzaimar:
Dann löse dieses Dilemma mit Events. So ein Frame muss doch nicht wissen, das es auf einer TFoobarForm ist. Wozu dann ein Frame? Der Sinn eines Frames ist doch, das man es wieder verwenden kann. Aber so sind die beiden Klassen wirklich untrennbar verbunden.
Frames deshalb, weil ich einen komplexen Teil eines noch komplexeren Formulars zur Laufzeit austauschen will. Ohne genau diese eine Form als Rahmen haben die Frames wenig Sinn.

Aber ich werde mir deine Überlegungen mal genauer zu Gemüte führen, wenn mal etwas mehr Zeit ist. Vielleicht finde ich wirklich noch ein paar bessere "Sollbruchstellen" zwischen Form und Frame.

Und vielen Dank für deine Ideen!

Uli.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

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

Re: überkreuzender Bezug von Units .. kleiner Workaround

  Alt 26. Sep 2007, 11:16
Zitat:
Dann ist das Klassenmodell in 90 % der Fälle falsch.
Hallo Hansa,

da stimme ich Dir zu. Aber es bleiben eben 10 Prozent übrig
Und für diese 10 Prozent soll es ja auch eine Lösung geben.
Auch ich bin der Meinung dass ein hirarchiches Klassenmodell besser ist.

Eine Klasse kann eine andere Klasse als Eigentümer haben und zurück gehts per Events. Sehr richtig.

Und ich muss Dir auch Recht geben, dass solche eng verknüpften Klassen dann auch in eine Unit gehören.
Ich arbeite aber effektiver, wenn ich micht nicht durch ellenlange Units durcharbeiten muss. Auf zwei kleinere Units verteilt ist das für mich übersichtlicher. Aber das ist eine perönliche Meinung.

Wenn Du magst, können wir ja gern mal über mein Klassenmodell diskutieren, ich bin sehr lernbereit!
Aber ob Hochwürden auch so gnädig ist?

Und was hast Du gegen Billiard? verlierst wohl immer? *g*

beste Grüße
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#17

Re: überkreuzender Bezug von Units .. kleiner Workaround

  Alt 26. Sep 2007, 11:36
Zitat von stoxx:
Wenn Du magst, können wir ja gern mal über mein Klassenmodell diskutieren, ich bin sehr lernbereit!
Aber ob Hochwürden auch so gnädig ist?
Hansas Verständnis für OO fängt beim Objectrepository der IDE für Forms an und es hört 1cm danach auf. Es ist also effektiv nicht existent.
Er hat bis heute nicht kapiert warum es abstrakte Methoden gibt, du kannst ihn also in fachlichen Dingen komplett ignorieren.
Manchmal wünschte ich, er könnte kurzzeitig verstehen worum es geht, so dass er sich grün & blau ärgern kann. (Über den Unsinn, den er so schreibt...)
Robert Giesecke
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#18

Re: überkreuzender Bezug von Units .. kleiner Workaround

  Alt 26. Sep 2007, 11:53
@Elvis : wo bleiben denn deine theoretischen Theorien, die die Welt nicht braucht ? Ich meine die völlig abstrakten, die keiner benutzt und du keinen Widerspruch zu befürchten hast ? Echt lächerlich abstrakt.

Stoxx, schildere mal das konkrete Problem. "Überkreuz" das riecht schon ziemlich nach Spaghetti-Code.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#19

Re: überkreuzender Bezug von Units .. kleiner Workaround

  Alt 26. Sep 2007, 11:56
Zitat von Elvis:
Er hat bis heute nicht kapiert warum es abstrakte Methoden gibt, du kannst ihn also in fachlichen Dingen komplett ignorieren.
Manchmal wünschte ich, er könnte kurzzeitig verstehen worum es geht, so dass er sich grün & blau ärgern kann. (Über den Unsinn, den er so schreibt...)
Hansa, Elvis, meint ihr, es lohnt sich, schon mal Popcornf zu holen?
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

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

Re: überkreuzender Bezug von Units .. kleiner Workaround

  Alt 26. Sep 2007, 12:20
Zitat:
"Überkreuz" das riecht schon ziemlich nach Spaghetti-Code.
na gut, vielleicht hätte ich drunter schreiben sollen. Liebe Kinder vor dem Fernseher, bitte nicht nachmachen!

Zitat:
Stoxx, schildere mal das konkrete Problem.
vielleicht mal beim Billiard


ich möchte mich aber jetzt nicht weiter in Eure Familienangelegenheiten einmischen, da tun sich ja Abgründe auf. Aber eigentlich magt ihr Euch doch, trinkt doch mal ein Bier zusammen.

Aber gerade abstracte Methoden nehmen Dir doch die Schreibarbeit von case Anweisungen ab.
Und genau das ist doch der Knackpunkt. Bei Quelltexterweiterungen an so wenigen Stellen wie möglich im Quelltext was ändern zu müssen.
(Quelltextsicherheit) -> abstrakte Methoden ...

Und ich verwende abstrakte Methoden auch durchaus.
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 22:04 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