Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Unit unabhängig von anderen Untis machen (https://www.delphipraxis.net/165456-unit-unabhaengig-von-anderen-untis-machen.html)

Jazzman_Marburg 1. Jan 2012 13:51

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

implementation 1. Jan 2012 14:01

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

Jazzman_Marburg 1. Jan 2012 14:23

AW: Unit unabhängig von anderen Untis machen
 
Zitat:

Zitat von implementation (Beitrag 1143885)
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.

Prima!
Das wollte ich nur hören (brauchte diesen :warn: "Amtlich"-Stempel).

Lieben Dank
Gruß
Jazzman

Aphton 1. Jan 2012 15:00

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);

fkerber 1. Jan 2012 15:26

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

Furtbichler 1. Jan 2012 16:31

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.

Jazzman_Marburg 1. Jan 2012 20:57

AW: Unit unabhängig von anderen Untis machen
 
Zitat:

Zitat von Furtbichler (Beitrag 1143903)
[...]
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.

Lieben Dank für alle Vorschläge!
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

Aphton 2. Jan 2012 05:41

AW: Unit unabhängig von anderen Untis machen
 
Hier & hier (passender) gibts mehr darüber zu lesen.

Allerdings reicht es in deinem Fall schon, wenn du dich an das hältst, was ich geschrieben habe. Denn das kannst du nachher einfach in nen Model-View-Controller einbauen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:59 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