![]() |
Unit unabhängig von anderen Untis machen
Frohes Neues!
Vielleicht kann mir ja jemand sagen, was die reine Lehre (oder die gelebte Praxis) zu meinem kleinen Probelm sagt: In einer Unit habe ich einen Algorithmus, der am Ende ein Array mit Rechtecken füllt (besser wäre Rechteck-Objekte in einem Objekt-Container, aber das sei jetzt mal egal). Nun sollen diese Rechecke auch gezeichnet werden. Ich möchte aber meine Alogrithmus-Unit soweit wie nur möglich vom eigentlichen zeichnen trennen. Meine Frage: Wie stelle ich es an, dass der Algorithums nun sein Array fertigstellt, und quasi sagt "Fertig!" -- falls sich nun eine Zeichen-Routine (in einer anderen Unit) dafür interessiert, wird gezeichnet oder eben nicht: Wichtig ist nur, dass der Algorithums nichts über das Zeichnen wissen soll (oder muß). Mein Ziel ist es die Algorithmus-Unit in verschiedenen Projekten zu verwenden -- dazu darf diese Unit aber keine Voraussetzungen über die übrige Welt machen: Es soll ihr quasi egal sein, wer sich und/oder ob sich überhaupt um das Rechteck-Array gekümmert wird. Ein wenig verschwurbelte Beschreibung, ich weiss, aber letztlich will ich diese Unit unabhängig von anderen Units machen -- aber die anderen sollen schon mitbekommen, dass jetzt das Rechteck-Array gefüllt ist. Erreiche ich dieses "Fertig" über ein Notify-Event? Vielen Dank Jazzman |
AW: Unit unabhängig von anderen Untis machen
Was spräche denn gegen ein Event? Wenn ein Zeichner da ist, muss der sich ggf. darin eintragen. Dein Algo muss dann dieses Event nur noch auslösen (vorher auf nil überprüfen) und der Zeichner kann loslegen.
[edit] Eine weitere Möglichkeit wäre ein Callback-Parameter, der ja letztlich auch nichts soviel anderes ist. [edit2] Noch eine Möglichkeit: Der Zeichner könnte ein Interface implementieren mit einer Methode "Zeichne" oder so |
AW: Unit unabhängig von anderen Untis machen
Zitat:
Das wollte ich nur hören (brauchte diesen :warn: "Amtlich"-Stempel). Lieben Dank Gruß Jazzman |
AW: Unit unabhängig von anderen Untis machen
Ich würds grob gesagt so lösen:
Delphi-Quellcode:
Unit A;
function ArrayMitRechteckenFüllen(): TRechteckArray;
Delphi-Quellcode:
Unit B;
uses A; procedure ZeichneRechtecke(const Rechtecke: TRechteckArray; Canvas: TCanvas); |
AW: Unit unabhängig von anderen Untis machen
Hi,
wieso muss denn der Algorithmus irgendwie das Zeichnen auslösen? Ich hätte eher gesagt, nachdem der Algorithmus fertig ist, kann sein Aufrufer entscheiden, wie es weiter geht. Dem stehen ja dann die Ergebnisse des Algorithmus zur Verfügung und er kann sie an die Zeichenroutine weitergeben. Dann kannst du auch die Zeichenroutine mit anderen Eingaben nutzen (z.B. zwischengespeicherte Ergebnisse aus einer Datei). Liebe Grüße, Frederic |
AW: Unit unabhängig von anderen Untis machen
Mir fallen spontan 2 Verfahren 1.
1. Events. Der Interessent installiert einen Event à la "Sag mir Bescheid, wenn Du fertig bist". Nachteil: Der Interessent muss wissen, das es einen Rechteckausrechnomat gibt 2. Controller. Rechteck-Rechn-O-Mat sagt dem Controller, wenn er fertig ist. Der Interessent kennt nur den Controller. Der sagt ihm "Sag Du mir Bescheid, wenn es Arbeit gibt". (2) ist besser, weil der Zeichner nicht mehr verändert werden muss, wenn es neben dem Rechteck-Rechn-O-Mat irgendwann auch noch einen Kreis-Rechn-O-Mat gibt. Auch der Controller muss nicht unbedingt erweitert werden. |
AW: Unit unabhängig von anderen Untis machen
Zitat:
Die Controller-Lösung klingt ja spannend -- und elegant! Leider weiß ich nichts über "Controller" -- ist das so ein Entwurfsmuster (GOF), oder wo könnte ich etwas darüber lesen? (Controller als keyword in Google ist ein wenig zu unspezifisch...). Wäre toll, wenn Furtbichler das nocheinmal kommentiern könnte. Vielen Dank! Jazzman |
AW: Unit unabhängig von anderen Untis machen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 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 by Thomas Breitkreuz