AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Actions einzeln oder mit Shared-Eventhandlern?
Thema durchsuchen
Ansicht
Themen-Optionen

Actions einzeln oder mit Shared-Eventhandlern?

Ein Thema von Assertor · begonnen am 20. Jun 2008 · letzter Beitrag vom 20. Jun 2008
Antwort Antwort
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#1

Actions einzeln oder mit Shared-Eventhandlern?

  Alt 20. Jun 2008, 18:45
Hallo Mitstreiter!

Ein Freitagabend-Thread mit dem Thema übersichtlicher, lesbarer VCL code. Die Frage: Actions gruppieren (shared eventhandler) oder mit einzelnen Events?

Damit meine Ich:
Delphi-Quellcode:
procedure TfrmMain.acExecute(Sender: TObject);
begin
  inherited;

  //----------------------------------------------------------------------------
  // buttons
  //----------------------------------------------------------------------------

  // exit
  if (Sender = acExit) then
  begin
    Close;
    Exit;
  end;

  // foo
  if (Sender = acFoo) then
  begin
    DoFoo;
    Exit;
  end;
end;
oder
Delphi-Quellcode:
procedure TfrmMain.acCloseExecute(Sender: TObject);
begin
  DoSomething;
end;

procedure TfrmMain.acFooExecute(Sender: TObject);
begin
  DoSomething;
end;
Bisher verwende ich die erste Variante, wobei das UI-Interface von der Anwendungslogik getrennt ist. Dies wird gelegentlich bei vielen Actions etwas lang, aber dank der Trennung bleibt es doch recht übersichtlich.

Was meint Ihr dazu, was ist sauberer und üblicher?

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Actions einzeln oder gruppieren?

  Alt 20. Jun 2008, 19:14
Hallo,

ist dir noch nicht aufgefallen, dass bei deiner bislang bevorzugten Methode 1 viele Vorteile einer TAction auf der Strecke bleiben? Die gemeinsame Caption für auslösende UI-Controls (Button, MenuItem) ist so nicht realisierbar. Die zeitlich abweichende Aktivierung und Deaktivierung unterschiedlicher Actions ist nicht möglich. Du scheinst so Spezialfälle zu lösen, die ich mir gerade nicht so gut vorstellen kann.

Grüße vom marabu
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#3

Re: Actions einzeln oder gruppieren?

  Alt 20. Jun 2008, 20:04
Hi Marabu,

schön mal wieder von Dir zu lesen

Zitat von marabu:
Die gemeinsame Caption für auslösende UI-Controls (Button, MenuItem) ist so nicht realisierbar. Die zeitlich abweichende Aktivierung und Deaktivierung unterschiedlicher Actions ist nicht möglich.
Trifft beides nicht zu. Die Actions für Form-Elemente sind ja einzeln deklariert (z.B. acButton1, acButton2). Somit sind alle Vorteile verfügbar.

Es geht lediglich um die Zuweisung der Methoden für acExecute/acUpdate. Diese werden gruppiert um eine übersichtlichere Darstellung zu erzielen.

Ich denke nämlich gerade umgekehrt wird ein Schuh daraus: Wenn man Actions anwendet, aber für jede Action einzeln ein acExecuteXYZ, acUpdateXYZ zuweist, wird der Code wieder unübersichtlich wie beim guten alten VCL OnEventXYZ.

Stimmen Sie mir da nicht zu, Herr Kollege?

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Actions einzeln oder gruppieren?

  Alt 20. Jun 2008, 21:01
Ich fürchte ich habe deinen Thread-Titel falsch interpretiert. Wenn die Action-Komponenten diskret bleiben, dann ist alles okay.

Wenn du dich auf mehr Übersichtlichkeit durch shared event handler bei der VCL berufst, dann gilt das natürlich auch für TActions. Generalisieren mag ich diesen Ansatz aber nicht und ich muss auch feststellen, dass ich in meiner beruflichen Praxis noch keine Notwendigkeit für dieses Vorgehen bei TActions gesehen habe. Das mag deswegen sein, dass bei Edit- und anderen UI-Controls tatsächlich oft gleiche Code-Strecken auftauchen, so dass ein shared event handler die Wartbarkeit erhöht. Das Zusammenlegen mehrerer event handler ohne diese Motivation überzeugt mich nicht - zumindest nicht sofort.

Freundliche Grüße
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#5

Re: Actions einzeln oder gruppieren?

  Alt 20. Jun 2008, 21:16
Hi,

Zitat von marabu:
Ich fürchte ich habe deinen Thread-Titel falsch interpretiert. Wenn die Action-Komponenten diskret bleiben, dann ist alles okay.
Ja, das meinte ich - wie gesagt ein Freitagabend-Thread

Zitat von marabu:
Wenn du dich auf mehr Übersichtlichkeit durch shared event handler bei der VCL berufst, dann gilt das natürlich auch für TActions.
Sehe ich genauso.

Zitat von marabu:
Generalisieren mag ich diesen Ansatz aber nicht und ich muss auch feststellen, dass ich in meiner beruflichen Praxis noch keine Notwendigkeit für dieses Vorgehen bei TActions gesehen habe. [...] Das Zusammenlegen mehrerer event handler ohne diese Motivation überzeugt mich nicht - zumindest nicht sofort.
Notwendigkeit besteht keine, das stimmt. Ich wollte nur wissen, ob ich mich im Rahmen von lesbarem, wartbarem Code bewege.

Ich habe mir in den letzten Projekten angewöhnt, die UI-Interaktionen über die Actions laufen zu lassen. Update und Executes sind bei mir immer Shared-Eventhandler, also gruppiert.

Es ist sicherlich ungewöhnlich, aber nicht verkehrt. Ich glaube mal einen ähnlichen Ansatz bei Troy Wolbrink (TntUnicode) oder Robert Lee (SpTBX) gesehen zu haben und bin von der Struktur begeistert. Es ähnelt in diesem Modellansatz ja einer kleinen Messagequeue

Gruß Assertor
Frederik
  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 09:01 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