Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#5

Re: Problem beim zugreifen von Unit auf Form

  Alt 1. Sep 2006, 16:56
HI,
an sich gibt es für dein Problem mind. zwei Lösungsmöglichkeiten.
Dabei möchte ich hier erwähnen, dass nur eine davon wirklich verwendet werden sollte. Die andere möchte ich nur nennen, da du sie finden kannst (auch in der DP). Deshalb fange ich mit dieser an und möchte auch gleich begründen warum du sie nicht verwenden solltest.
Unter Delphi gibt es die Möglichkeit über Kreuz/zyklisch einzubinden. Dazu kannst du die Uses Klauseln einmal im Interface und einmal im Implementation Teil eintragen. Damit bleibt aber das eigentliche Problem erhalten. Du schaffst hier eine Abhängigkeit, die völlig unnötig ist. Die beiden Klassen kannst du so nicht mehr einzeln verwenden und das gilt immer als schlechtes Design von Software.

An sich hast du schon einen guten Ansatz. Du sprichst von einer Klasse, die RichEdits verwaltet. Das ist gut, wenn hier nichts anderes stattfindet. Die Anzeige der TRichEdits wäre schon eine Sache, die man von der Verwaltung trennen kann (siehe Mehrschicht-Modelle oder MVC).
Jedenfalls ist hier eine der deutlich besseren Möglichkeiten, dass du eine Klasse schaffst, die sowohl das Formular als auch die Verwaltung der RTFs kennt (also die beiden Units in die eigene Uses Klausel aufnimmt) und zwischen beiden vermittelt. Dies wäre eine Möglichkeit, aber noch immer nicht die Beste.
Wie die Beste aussieht kann pauschal eh nicht gesagt werden, da kommt es immer darauf an, was du eigentlich machen willst (was aus deinem Beitrag nicht genug hervor geht).
Die Frage ist, was muss die Verwaltung eines TRichEdits wissen? Sie sollte eigentlich komplett ohne ein spezielles Formular auskommen. Alles was du von dem Formular wissen möchtest, kennt eigentlich schon die Unit des Formulars (logischer Weise). Was du hier letztlich benötigst sollten sehr primitive Datentypen (Texte/Strings, Zahlen, ...) sein. Diese kannst du als solchen Typen von dem Formular an eine Unit übergeben, ohne dass diese andere Unit wissen müsste wo die Daten herkommen. Möchtest du z.B. auf die Eingabe in einem TEdit reagieren wollen, könnte dein Formular den String dieses TEdit einfach weiterreichen.
Letztlich geht es bei Design deiner Software immer darum, dass jede Unit möglichst wenig von ihrer Umwelt wissen sollte. Damit kannst du die einfach wiederverwenden. Zu dem erhöht es die Möglichkeit, einzelne Teile auszutauschen, da es hier wenig oder keine Abhängigkeiten gibt.

Hier ist es schwer ein konkretes Beispiel zu deinem Problem zu nennen, da ich nicht weiß was deine Verwaltung im Moment vom Formular wissen soll.

Gruß Der Unwissende

[ADD nach rotem Kasten]
Oh, das ist übrigens eine gaaaanz schlechte Lösung!
Units sollten immer nur ein Problem behandeln. Alles andere macht sie unnötig groß (und damit nicht zu letzt auch deine Programme). Große Dateien kann man deutlich schlechter lesen und damit auch schlechter warten. Die Abhängigkeiten sind auch entsprechend groß, du kannst hier ja nichts austauschen. Es ist eine wirklich schlechte Lösung und sollte nie als Alternative in Betracht gezogen werden
[/ADD]
  Mit Zitat antworten Zitat