AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Softwareentwicklung im Allgemeinen Projektplanung und -Management Gibt es ein Design-Pattern für den Programm-Status?
Thema durchsuchen
Ansicht
Themen-Optionen

Gibt es ein Design-Pattern für den Programm-Status?

Ein Thema von mh18058 · begonnen am 20. Okt 2021 · letzter Beitrag vom 2. Nov 2021
Antwort Antwort
mh18058

Registriert seit: 21. Nov 2008
15 Beiträge
 
#1

Gibt es ein Design-Pattern für den Programm-Status?

  Alt 20. Okt 2021, 17:21
Hallo zusammen,
vielleicht weiß jemand eine Antwort auf die Frage: "Gibt es ein Design-Pattern für den Programm-Status?"
bzw. "Wie behandelt man den Programm-Status in Delphi ordentlich und übersichtlich?"

Ich versuche mal ein einfaches Szenario zu beschreiben, woher meine Frage kommt:
1. Ein Programm mit Benutzeroberfläche, startet zunächst mit allen Eingabeelementen zur Weiterverarbeitung auf disabled.
Dieser Status wird durch die globale Variable Inputdata_ok := false; beschrieben.
2. Das Programm liest nun ein Inputfile ein.
3. Wenn das gelingt, wird dieser Status durch Inputdata_ok := true; beschrieben.
4. Weil Inputdata_ok := true; ist, werden dann auf der Benutzeroberfläche die Eingabeelemente zur Weiterverarbeitung enabled.
5. Wenn das Einlesen eines neuen Files misslingt, wird zunächst wieder Inputdata_ok := false; gesetzt.
6. Weil nun Inputdata_ok := false; gesetzt ist, werden die Eingabeelemente disabeled.

D.h. die globale Statusvariable Inputdata_ok wird an vielen Stellen im Programm gesetzt und ausgewertet und
steuert mehrere Elemente gleichzeitig auf enabled bzw. disabled. Dieser Satz allein ist schon grauselig!

Bei einem umfangreichen Projekt kam ich dann mit den vielen Stati auch ziemlich durcheinander.
Folglich stellte sich die Frage, ob es da vielleicht ein Architekturmuster, ein Design-Pattern,
eine Komponente o.ä. gibt, was den Status eines Programms übersichtlich behandelt.
Vielleicht hat ja jemand auch einfach eine passende Programmierregel für mich, damit ich mit den Stati besser klarkomme.
Vielleicht hab´ ich auch ganz grundsätzlich einen falschen Ansatz.

Ich hoffe Ihr kennt, bzw. versteht das Problem und könnt mir einen Tip geben wie ihr damit umgeht.
Gruß
Martin
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.386 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Gibt es ein Design-Pattern für den Programm-Status?

  Alt 20. Okt 2021, 17:55
Hoi Martin,
ich denke nicht, dass es da ein Design-Pattern gibt. Das ist eher ein Antipattern.
Globale Variablen sind per see schlecht. In meinem Home-Projekt habe ich leider auch solche.

Bei uns in der Firma haben wir für den Status ein Object das man sich von einer Factory holen kann. Und diese Factory wird dann üblicherweise über Dependency Injection den Verwendern reingereicht.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.937 Beiträge
 
Delphi 12 Athens
 
#3

AW: Gibt es ein Design-Pattern für den Programm-Status?

  Alt 20. Okt 2021, 18:13
StateMachine ?

https://www.delphipraxis.net/186504-...er-delphi.html
https://github.com/SirRufo/stateless

Ich würde aber auch meinen dass dies mit Kanonen auf Spatzen ist, ich denke dafür ist dein State zu simpel ist,
und durch eine spezielle Klasse oder Singleton dafür abgebildet werden könnte.
Ich habe aber nicht ganz nachvollzogen was genau Du gerne Alles hättest.

Womöglich kommt sogar irgendwas mit Publish/Subscribe in Frage, was dann deine einzelnen Module benachrichtigt und verwaltet.

(Kanonenboote auf eine ganze Spatzenherde)
  Mit Zitat antworten Zitat
mh18058

Registriert seit: 21. Nov 2008
15 Beiträge
 
#4

AW: Gibt es ein Design-Pattern für den Programm-Status?

  Alt 20. Okt 2021, 23:09
Hallo,
vielen Dank für eure schnellen Antworten.

@Rollo62
Ich hätte gerne den Durchblick!
Spaß beseite:
Mein Erklärbeispiel war vielleicht zu einfach. In Wirklichkeit ist es sehr umfangreich geworden mit vielen peinlichen Zugriffen auf die Statusvariablen.
Der Status ist ja ein globaler Zustand auf den ich überall, also auch lokal, reagiere.
Und da hab´ ich beim letzten Projekt einfach den Überblick verloren, was da wann wie wo gesetzt und ausgewertet wird.

Vielleicht war meine Frage nach Design-Pattern auch ungeschickt gestellt, weil ich zur Laufzeit garkeine neuen Objekte erzeuge.
Vielmehr ist es die Frage nach einer strukturierten Ordnung in Sachen Status.
Ich habe den Verdacht, daß ich die Komplexität beim Status anfänglich einfach unterschätzt habe und dadurch so schleichend Schludercode entstanden ist.

Ja, Statemaschine hatte ich aufgemalt und daraus immerhin die einzelnen Stati hergeleitet. Das war ja schon mal was!
Soweit ich das im Moment beurteilen kann, ist "Stateless" von SirRufo ein Gerüst an das man seine Programmfeatures dranhängen kann.
Klar, in meinem Fall sicher mit Kanonen auf Spatzen geschossen, aber wenn ich damit dann immer genau weiß in welchem Status das Programm ist, soll´s mir recht sein.
Das nächstes Delphi-Projekt ist ein UserInterface für einen Fortran-Numbercruncher. Da könnte "Stateless" ein geeigneter Weg sein.
Ich werde mir das mal genauer ansehen und dann nochmal in mich gehen ... das Thema ist noch nicht erledigt ...

Danke euch auf jeden Fall für eure prompte Hilfe.
Gruß
Martin

Geändert von mh18058 (20. Okt 2021 um 23:11 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Gibt es ein Design-Pattern für den Programm-Status?

  Alt 21. Okt 2021, 00:28
Hallo,
wenn es unbedingt ein Pattern sein soll:
Singleton

1 einzelnes Objekt mit je einem Property je Status,
dazu Get- und Set-Methoden.

Um rauszufinden, wo ein Status gesetzt wird,
reicht dann ein Breakpoint auf die Set-Methode.
Heiko
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.115 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Gibt es ein Design-Pattern für den Programm-Status?

  Alt 21. Okt 2021, 07:23
Das ist doch eigentlich überhaupt nicht Ungewöhnliches. Außer dass ich nicht verstehe, wo auf einmal globale Variablen notwendig geworden sind.

Bau dir doch erst einmal ein einfaches Objekt das den Zustand regelt. Werde dir über die Zustände (TEingabeZustand = (warteAufErsteEingabe, eingabeFalsch, datenWerdenVerarbeitet, ...) ) klar und setze die Zustandsübergänge um (.eingabeWarRichtig() , eingabeWarFalsch() , ...).

Wenn das alles stimmt fehlt doch nur noch, dass deine Oberfläche (TForm/TFrame) die Änderung des Zustands mitbekommt und entsprechend darauf reagiert. Heißt: Dein Formular muss dein eben gebasteltes Zustands-Objekt kennen, und nicht dein Zustands-Objekt deine Formulare.

Wie man auf Änderungen reagiert ist im Endeffekt genauso wie ein OnClick bei einem TButton , dein Zustandsobjekt bietet ein Event an, und deine Oberfläche hängt sich an das Event dran. Wie man das konkret umsetzt gibt es viele Möglichkeiten, aber über "Publish / Subscribe" sollte man zu dem Zeitpunkt schonmal etwas gelesen haben.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 08:14 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