Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehlerbehandlung - Umgang mit Exceptions (https://www.delphipraxis.net/130567-fehlerbehandlung-umgang-mit-exceptions.html)

Mr_G 10. Mär 2009 19:35


Fehlerbehandlung - Umgang mit Exceptions
 
Hallo zusammen,
ich schreibe gerade eine Klasse und muss mich um die Fehlerbehandlung kümmern. Ich hatte eigentlich vor ein Event zur Verfügung zu stellen, durch das man auf Fehler reagieren kann. Dennoch dachte ich, es wäre vielleicht sinnvoll eigene Exceptions einzubauen falls der Programmierer die gebotene Möglichkeit nicht nutzt.

Das Problem: Wenn ich nun sowohl das Event auslöse als auch eine Execption werfe bekommt der User evtl. zwei Meldungen wenn man im OnError-Event auch eine Meldung ausgeben will.

Ich frage mich nun ob das gegenläufige Ansätze sind? Ich zwinge eben den Programmierer mit Exceptions try...except-Blöcke zu nutzen oder er muss das Event nutzen.
Meine Idee das Problem zu umgehen wäre ein Flag zu nutzen und die Exceptions nur auszulösen, wenn dieses gesetzt ist.

Meine Frage: Wie macht man es denn richtig bzw. was ist guter Programmierstil? :coder:

Luckie 10. Mär 2009 19:39

Re: Fehlerbehandlung - Umgang mit Exceptions
 
Vergiss die Ereignisse und arbeite mit Exceptions.

Mr_G 10. Mär 2009 19:47

Re: Fehlerbehandlung - Umgang mit Exceptions
 
Sprich ein OnError-Event ist hier eher der schlechte Stil?
Ich muss zugeben, dass mich das etwas wundert. Ich habe so ein Event schon öfter gesehen und genutzt.

Apollonius 10. Mär 2009 19:56

Re: Fehlerbehandlung - Umgang mit Exceptions
 
In den meisten Fällen muss ich Luckie zustimmen. Sinnvoll halte ich ein OnError nur bei solchen Dingen wie Sockets, wo Fehler aufgrund ihrer asynchronen Natur schwer zu fangen sind. Sonst verleiten solche Events nur zu schlechtem Stil, d.h. einem globalen Handler ("Es ist ein Fehler aufgetreten"). Wenn der Programmierer Code aufruft und dieser Aufruf fehlschlägt, dann muss ihm der Fehler am Aufrufort um die Ohren gehauen werden! Ohne Kenntniss der Aufrufsituation kann sonst keine gute Fehlerbehandlung stattfinden.

mkinzler 10. Mär 2009 19:58

Re: Fehlerbehandlung - Umgang mit Exceptions
 
Zitat:

Sonst verleiten solche Events nur zu schlechtem Stil, d.h. einem globalen Handler ("Es ist ein Fehler aufgetreten").
Ist aber bei Exception genauso- Auch diese kann man recht global abfangen

Mr_G 10. Mär 2009 19:59

Re: Fehlerbehandlung - Umgang mit Exceptions
 
Oje... genau hier gehts los: Es handelt sich um eine Klasse zur Kommunikation via Sockets.
Was mach ich denn nun?

mkinzler 10. Mär 2009 19:59

Re: Fehlerbehandlung - Umgang mit Exceptions
 
Dann wäre ein Event ok.

Luckie 10. Mär 2009 20:01

Re: Fehlerbehandlung - Umgang mit Exceptions
 
Es ist umständlich. Der Programmierer muss dann immer noch eine Ereignisbehandlungsroutine schreiben. Mit Exceptions kann er den Fehler in der Routine abfangen in der er auftritt.

Und ausserdem führt das zu einem ewigen hin und her gescrolle im Code. Und wenn du dem Fehlererignis einen Fehlercode mitgibst, hast du in der Ereignisbahendlungsroutine irgendwann mal eine Ellen lange case-Abfrage, das ist auch unschön.

Apollonius 10. Mär 2009 20:01

Re: Fehlerbehandlung - Umgang mit Exceptions
 
Zitat:

Zitat von mkinzler
Zitat:

Sonst verleiten solche Events nur zu schlechtem Stil, d.h. einem globalen Handler ("Es ist ein Fehler aufgetreten").
Ist aber bei Exception genauso- Auch diese kann man recht global abfangen

Schlimm genug, dass sich diese Praxis in Delphi so gut wie durchgesetzt hat. Ein Event zwingt einen praktisch dazu.

Mr_G 10. Mär 2009 20:09

Re: Fehlerbehandlung - Umgang mit Exceptions
 
Ich hab da noch eine Idee... die ist aber glaube ich sehr "unsauber":
Das Event bekommt einfach einen var-Parameter mit dem es signalisieren kann ob es den Fehler behandelt hat (so im Stil con CanClose). Wurde der Fehler behandelt wird keine Exception geworfen, falls nicht werfe ich eben die Exception.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:07 Uhr.
Seite 1 von 2  1 2      

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