AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

Ein Thema von Rollo62 · begonnen am 1. Jul 2020 · letzter Beitrag vom 10. Jul 2020
Antwort Antwort
Seite 1 von 3  1 23   
Rollo62

Registriert seit: 15. Mär 2007
3.895 Beiträge
 
Delphi 12 Athens
 
#1

Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 10:40
Delphi-Version: 10.4 Sydney
Hallo zusammen,

um es gleich vorweg zunehmen, ich kenne mich mit TAction, Events, etc. aus und weiss damit umzugehen.

Weil ich mal wieder darüber gestolpert bin:

Was ich nicht verstehe ist warum die Events in Controls nicht nur via Benutzereingaben gefeuert werden ?
Z.B. eine Checkbox in FMX feuert auch den OnChange Event wenn man Checkbox.IsChecked ändert.

Das kann zu üblen Seiteneffekten führen, und ich würde das Feuern per Code eigentlich generell immer abschalten.

Das heisst:
Control --> geändert durch Eingabe --> Events sollen feuern (OK)
Control --> geändert per Runtime Code --> Events sollen NICHT feuern (das tun sie aber doch)

Änderungen per Code sollten doch zur Konfiguration der Controls nutzbar sein, ohne gleich alle möglichen Seiteneffekte zu triggern.

Was ich gerne wissen möchte ist, ob hinter diesem aktuellen Verhalten vielleicht ein größeres Konzept oder Pattern steht,
und warum das direkte Feuern per Code womöglich doch Sinn machen könnte ?

Vielleicht in einem M(V/P)M Konzept könnte das Feuern Sinn machen, obwohl ich das auch nicht unbedingt sehen kann.
Auch hier sehe ich sinnvollerweise zwei Schichten:
1. die Änderung via Code und 2. das Triggern von Events wenn modified, bei Bedarf.

Warum wurde das Framework so designed dass dieses direkte Feuern per Code kommt ?

Geändert von Rollo62 ( 1. Jul 2020 um 11:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 11:03
Ich denke mal, das wurde so implementiert, weil es auch in der VCL so ist. Dort ist es so, weil es eine Windows Control ist, welche sich so verhält. Und um es dem eingefleischten Delphi-Entwickler leichter zu machen, wurde das Verhalten so übernommen.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Rollo62

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

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 11:08
Ja schon, könnte sein.
Aber gibt es dafür nicht irgendein übergeordnetes Konzept oder Design-Pattern ?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 11:31
Die FMX Checkbox ist ein denkbar schlechtes Beispiel, denn genau die ist bei den angesprochenen Events genau richtig:
- OnClick - wenn der Nutzer drauf klickt
- OnChange - wenn sich der Wert ändert, egal ob durch UI Interaktion oder Code
- OnExecute einer zugewiesenen TAction hängt sich an das OnClick

Dahingehend ist die VCL Checkbox eine Katastrophe, denn dort sind Anklicken und Wert ändern miteinander verwurschtelt und beides Triggert OnClick
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 1. Jul 2020 um 11:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.097 Beiträge
 
Delphi 12 Athens
 
#5

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 11:53
In der VCL wird beim MyCheckBox.Checked := True; sogar ein OnClick ausgelöst. (das arbeitet dort wie ein OnChange, was es nicht gibt)

Da wir eh alle Komponenten immer abgeleitet haben,
konnen wir hier an zentraler Stelle ein CheckedNoClick einbauen, wo bei Zuweisung kurz das Event abgehängt wird.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.895 Beiträge
 
Delphi 12 Athens
 
#6

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 12:48
- OnChange - wenn sich der Wert ändert, egal ob durch UI Interaktion oder Code
Ok, wenn man das getrennt sieht OnClick/OnChange könnte ein Schuh daraus werden.
Aber macht es überhaupt Sinn das Triggern durch den Code ?

Ist das jetzt Gut oder Schlecht das es triggert ?

..
konnen wir hier an zentraler Stelle ein CheckedNoClick einbauen
Ja genau, ich baue mir auch die passenden Properties ein
hier z.B.
Delphi-Quellcode:
  //1.
  Checkbox.IsChecked := xxx; // Standard, immer OnChange
  Checkbox.IsChecked_Quiet := xxx; // Neu: immer Silent
Weil ich dann immer diese doppelten Properties habe denke ich, sollte ich nicht so ändern:
Delphi-Quellcode:
  //2.
  Checkbox.IsChecked := xxx; // Geändert, immer Silent
  Checkbox.IsChecked_Notify := xxx; // Neu: immer OnChange (wie altes Verhalten)
Wohlgemerkt das ist jetzt nur ein Beispeil (Checkbox), das zieht sich aber durch alle Komponenten.
Macht es Sinn das für alle Komponenten anzupassen, so dass das Verhalten wie 2. ist ?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.977 Beiträge
 
Delphi 12 Athens
 
#7

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 13:01
In der VCL wird beim MyCheckBox.Checked := True; sogar ein OnClick ausgelöst. (das arbeitet dort wie ein OnChange, was es nicht gibt)

Da wir eh alle Komponenten immer abgeleitet haben,
konnen wir hier an zentraler Stelle ein CheckedNoClick einbauen, wo bei Zuweisung kurz das Event abgehängt wird.
Das kannst'e einfacher haben! TButtonControl , von dem z.B. TButton , TCheckBox und TRadioButton abgeleitet sind, hat ein protected Property ClicksDisabled , mit dem man das verhindern kann.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.895 Beiträge
 
Delphi 12 Athens
 
#8

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 13:10
at ein protected Property ClicksDisabled , mit dem man das verhindern kann.
Das kenne ich auch, finde ich aber vom Verhalten/Bezeichnung her völlig Unintuitiv.

Deshalb möchte ich ja generell diese Events per code abschalten, was spräche dagegen ?
Umgekehrt, wenn ich was triggern möchte dann muss ich das bewusst tun.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 13:15
Als ich mal Controls erstellt habe, hatte ich die Properties normal mit Gettern (_get_Xyz) und Settern (_set_Xyz) incl. Benachrichtigungen erstellt und zusätzlich eine Methode SetXyz(Value...) bereitgestellt für stille Änderungen und Initialisierungen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.097 Beiträge
 
Delphi 12 Athens
 
#10

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 13:24
Hey, das war doch nur ein Beispiel aus einem uralten Programm, welches noch Altlasten von vor 25 mitschleppt
und was auch über Tastatur bedienbar sein soll und, wo man von Userseite bei der Leertaste denoch das OnClick haben will, trots Delphi XE, DevExpress und ein paar Win10 im Win2000-Look.

Vielleicht vermutlich eventuell komm ich dieses ja mal dazu unser Programm auf 10.x zu migrieren.
73 EXE/DLL/BPL, 475 inkl. Fremdkomponenten und 557 eigene PAS ... da braucht es einfache zentrale Lösungen.
Vor paar Jahren hatte ich schonmal von D7 auf XE und ein Vorgänger von TurboPascal zu Delphi.
Und natürlich muß sich das Programm für die alten Hasen noch genauso mit Tastatur bedienen lassen, wie damals im DOS.
Auch neue Eingabefelder sollten den "eingeschleiften" Workflow nicht verändern, aber dennoch sollen zugleich auch aktuellere Gestaltungsmittel Einzug finden usw.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Jul 2020 um 13:33 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:54 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