Seite 1 von 1

Fehler: Behandeln oder weiterreichen?

BeitragVerfasst: Mo 22. Mär 2010, 14:15
von Bernd Gilles
Wie sollen die Funktionen/Prozeduren und Klassen mit Fehlern umgehen?

Ich persönlich würde es bevorzugen, wenn Fehler in der Codelib grundsätzlich NICHT behandelt, sondern lediglich an den Aufrufer weitergereicht würden.
Grund: Der "Benutzer" einer CodeLib-Methode hat vielleicht ganz andere Ansichten darüber, wie mit einem bestimmten Fehler umzugehen ist als der Entwickler der Methode.

Re: Fehler: Behandeln oder weiterreichen?

BeitragVerfasst: Mo 22. Mär 2010, 14:30
von Josef Pötzl
Ich würde trotzdem eine Fehlerbehandlung einbauen, da die Dateien aus der codelib direkt in die Anwendung kommen sollen um dort unverändert verwendet werden zu können.
Wenn man dann die Fehlerbehandlung nur noch in den anwendungspezifischen Teilen einbaut, gibt es ein Problem, wenn man Code-Module aus der Codelib verwendet, die bereits die oberste Aufrufebene darstellen. Aus diesem Grund existiert in den aktuellen Code-Modulen eine Fehlerbehandlung, diese ist allerdings so gestaltet, dass einerseits der Anwendungsentwickler über ein "config-Modul" (base/_config_Application.bas) die Standard-Fehlerbehandlung steuern kann und andererseits sind die "untergeordneten" Prozeduren so eingestellt, dass zwar der Fehler an die Fehlerbehandlung weitergereicht wird, allerdings dort dann wieder ausgelöst wird und so ganz nach oben weitergereicht wird. Das hat den Vorteil, dass man den "Entstehungspfad" des Fehlers ermitteln kann.

Den Fehler Abfangen - im Sinne von Msgbox anzeigen - und dann im Code weitermachen, als wäre nichts gewesen, darf natürlich nicht passieren.

Grund: Der "Benutzer" einer CodeLib-Methode hat vielleicht ganz andere Ansichten darüber, wie mit einem bestimmten Fehler umzugehen ist als der Entwickler der Methode.

Wenn man die Fehlerbehandlungsroutine aber so optimiert, dass sie auch den Anwendungsentwicklern verwenden will, dann passt wieder alles. ;)

mfg
Josef

Re: Fehler: Behandeln oder weiterreichen?

BeitragVerfasst: Di 30. Mär 2010, 14:17
von Josef Pötzl
Noch ein Nachtrag, da mich Rainer gerade auf eine Variante für Klassen aufmerksam machte:

Bei Klassen ist ja zu 100% gegeben, dass sie niemals die äußerste Aufrufebene darstellen können. Somit könnte man die Klassen unabhängig von einer globalen Fehlerbehandlung gestalten und in jede Klasse eine private Fehlerbehandlungsrouting einbauen, in der die Fehlerquelle angepasst wird und dann der Fehler in die Aufrufebene weitergegeben wird.
.. also im Prinzip so, wie ich derzeit bei der allgemeinen Fehlerbehandlung durchführe, aber nur ohne Bezug zu dieser globalen Fehlerbehandlung. (In dieser Prozedur könne man auch noch ein zusätzliches Ereignis auslösen, um vor der Weitergabe an die aufrufende Prozedur, einer "Fehlerüberwachung" den Fehler zu beseitigen zu lassen.)

Vorteil: die Klasse würde das Module "modErrorHandler" nicht benötigen.
Nachteil: die Erstellung der Fehlerbehandlung wird aufwendiger und mir fällt momentan keine praktische Variante ein, wie man dann in der Klassen-Prozedur weiterarbeiten lässt, wenn die Fehlerursache von außen behoben wurde. .. andererseits: will man überhaupt weiterarbeiten lassen?

Re: Fehler: Behandeln oder weiterreichen?

BeitragVerfasst: Di 30. Mär 2010, 15:58
von raist10
@ Josef

Nachteil: die Erstellung der Fehlerbehandlung wird aufwendiger und mir fällt momentan keine praktische Variante ein, wie man dann in der Klassen-Prozedur weiterarbeiten lässt, wenn die Fehlerursache von außen behoben wurde. .. andererseits: will man überhaupt weiterarbeiten lassen?


Sind wir wieder beim Thema ... das sollte der Entwickler doch selbst entscheiden. Im Zweifel behebt er das Problem von aussen und startet den Durchlauf der Klasse nochmal oder greift dann einfach nur auf die einzelne Funktion zu die fehlt oder er verwendet die Rückgabe des Fehlers um seine eigene Vorstellung von der weiteren Verarbeitung zu realisieren/anzuschieben.

Und irgendwie vermute ich das Bernd Gilles da auch eine ähnliche Ansicht teilt. *g*

Gruß

Rainer

Re: Fehler: Behandeln oder weiterreichen?

BeitragVerfasst: Do 1. Apr 2010, 19:33
von Josef Pötzl
Beispieldatenbank mit ein paar Varianten der Fehlerbehandlung

In der Klasse mit der Fehlerbehandlung baute ich auch noch eine Compiler-Anweisung ein, damit man zw. reiner Klassenbehandlung und Verwendung einer globalen ErrorHandler-Prozedur wechseln kann.
Die Module A_..., B_... und C_... dienen zum Starten der Tests.

A_SoNicht
Fokus in die Prozedur "Proc1" stellen und Prozedur ausführen {F5}.
Dieses Modul soll zeigen, wie eine Fehlerbehandlung nicht sein darf.

B_SoIstEsBesser
Fokus in die Prozedur "Proc1" stellen und Prozedur ausführen {F5}.
In diesem Modul wird richtigerweise der komplette Aufruf abgebrochen, da der Fehler nirgends behoben wurde.

C_TestModul_fuer_Klassen
Fokus in die Prozedur "TesteKlassen" stellen und Prozedur ausführen {F5}.
Dieses Modul zeigt verschiedene Varianten, wie Fehler in Klassen behandelt werden könnten.
Bei der Variante mit der Klasse BeispielMitFehlerbehandlung wird in 2 Fällen auf den Fehler reagiert und für den Test angenommen, dass der Fehler behoben wurde.

Bei der Variante mit der Klasse BeispielOhneFehlerbehandlung sieht man, dass man dabei die Information fehlt, in welchem Code-Module der Ursprung des Fehlers liegt.


BTW: eigentlich hätte ich die Module auch ins Test-Repository stellen können, aber eine fertige Anwendung ist vermutlich praktischer. ;)

mfg
Josef

Re: Fehler: Behandeln oder weiterreichen?

BeitragVerfasst: Fr 2. Apr 2010, 15:37
von raist10
Werde mir die Beispiele mal demnächste näher zu Gemüte führen. Aber zu A_SoNicht kann ich schon eindeutig mein /sign geben. ^^

Gruß

Rainer