Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
31. Jul 2023
Das mag vielleicht sein, aber die Entscheidung obliegt dem Entwickler der diese im Kontext seiner Anwendung macht. Eine pauschale Verurteilung von Singletons ist ebenso fehlgeleitet wie eine falsche Verwendung eines solchen. Natürlich gibt es Fälle, in denen ein Singleton die falsche Wahl ist, aber es gibt genügend Fälle wo das nicht gilt. Das kann man eben nicht pauschal beurteilen sondern...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
28. Jul 2023
Ein Singleton ist ja erstmal nur eine zentrale Instanz, die nur einmal im Programm existiert. Das bedeutet aber nicht, dass diese Instanz immer die gleiche Implementierung haben muss.
Für Unittests kann man ja auch einen Mock als Singleton verwenden. Auch ein Null-Object als Default-Implementation ist zulässig, wenn keine andere Implementierung benötigt wird.
Wenn das nicht ginge,...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
19. Jul 2023
Am Ende sind solche class var bzw. class function (insbesondere wenn auch noch static) auch nichts anderes als globale Variablen bzw. Methoden. Es ändert sich lediglich die Syntax des Zugriffs.
Die Namensgebung wird auch etwas einfacher (obwohl die ja nie einfach ist), da man mit dem Klassennamen als Präfix eine gewisse Kapselung erhält, die bei echten globalen Variablen und Methoden ja nur...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
19. Jul 2023
Oder man verwendet das propf Template (oder MMX).
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
19. Jul 2023
Natürlich, und das ist ja auch nicht falsch. Wir zeigen hier lediglich andere Wege auf.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
19. Jul 2023
Um die globalen Variablen und Funktionen in einer Klasse zu kapseln, ohne davon eine Instanz erzeugen zu müssen, könnte man das so lösen:
type
TWorkflow = class
public
class var
Variable1: Integer;
Variable2: Integer;
Variable3: Integer;
class function HandleWorkflow1: Boolean;