Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-08-2006, 20:13   #1 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Beispiel: Exceptionhandling in ActionScript

Mancher osflasher kennt das vielleicht schon, aber damit die anderen nicht dumm sterben, verlinke ich das hier auch mal. In meinem Beispiel geht es darum, wie man in AS2 mit Exceptions umgeht. Es wird eine XML Datei geladen, die Fehler enthält. In der Fehlerbehandlung wird dann eine andere XML Datei geladen, die (hoffentlich) keine Fehler enthält. Ok, das Beispiel ist vielleicht etwas weit hergeholt, weil man normalerweise kaum eine zweite XML-Datei zur Verfügung hat. Es ging mir aber darum, zu zeigen, dass man mit Exceptions schnell die Kontrolle an den Aufrufer zurückgeben kann, und der dann entscheiden kann, wie der Fehler behandelt werden soll.

Kommentare sind wie immer willkommen,
mfg. r
Angehängte Dateien
Dateityp: zip ExceptionHandlingExample.zip (17,9 KB, 36x aufgerufen)
bokel ist offline   Mit Zitat antworten
Alt 31-08-2006, 09:09   #2 (permalink)
Flashinspector
 
Benutzerbild von ms_hh
 
Registriert seit: Jul 2003
Beiträge: 208
Moin Bokel,

ich selber bin ein großer Freund von Exceptions. Was ich mich Frage, warum leitest Du deine Exception nicht vom "Error-Objekt" ab? Macht das nicht mehr sinn? Dann könnte man auch mit catch,try und finally arbeiten.

Bei meinem "Exception-Framework", werden alle "geworfenen" Exception bei einem "Controller" in den Stack gepackt. So kann ich einen Fehler genau reproduzieren, bzw. Ich kann genau herausfinden, wann und wo ein Fehler passiert ist. Ich fand diese Arbeitesweise ganz "sexy", da ich micht jetzt nicht um jede Exception einzeln kümmern muss, sondern alles über einen "Controller" erledigen kann.

Grüsschen
Markus
__________________
WEFWEF
ms_hh ist offline   Mit Zitat antworten
Alt 31-08-2006, 09:28   #3 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Ja klar, ich könnte Error noch als Basisklasse von RuntimeException benutzen. Für try catch finally ist das aber nicht nötig. Wichtig ist aber auf jeden Fall, dass man eine Basisklasse hat, mit der man "alle" Exceptions catchen kann. Ich benutze dafür halt die RuntimeException.

Das catch-all braucht man unbedingt um in asynchronen Eventhandlern Exceptions catchen und in ein Event verpacken zu können. Wenn man das nicht macht, stirbt die Anwendung einfach an der Stelle, weil man ja kein try catch um einen Eventhandler herum bauen kann. So einen Fehler zu finden ist sehr schwierig. Deshalb trace ich die Exception immer sofort bei der Erzeugung in der Basisklasse. Das ist wahrscheinlich die Stelle, an der du dann die Exception an deinen Controller weiterreichst, oder? (im Konstruktor von RuntimeException)

mfg. r
bokel ist offline   Mit Zitat antworten
Alt 31-08-2006, 09:45   #4 (permalink)
Flashinspector
 
Benutzerbild von ms_hh
 
Registriert seit: Jul 2003
Beiträge: 208
Zitat:
Zitat von bokel
Deshalb trace ich die Exception immer sofort bei der Erzeugung in der Basisklasse. Das ist wahrscheinlich die Stelle, an der du dann die Exception an deinen Controller weiterreichst, oder? (im Konstruktor von RuntimeException)
Sobald der Konstruktor der Exception aufgerufen wird, wird auch sofort getraced/geloggt. Was hinzukommt, ist das "weiterreichen" zum Controller.

Hier mal ein Beispiel, wie mein Aufruf einer Exception aussieht.
PHP-Code:
// @param :String - Diese Nachricht enthält eine Fehlerbeschreibung
// @param :Object - Referenz auf das Object, welches die Exception "wirft"
// @param :Array - Die Function.arguments
// @param :Object - Ein Object, welches durch gereicht wird.
throw new de.wefwef.env.except.Exception"Meine Nachricht"thisarguments, {erno:1} ); 
Im Konstruktor von "Exception" steht nun "vereinfacht" das:

PHP-Code:
// "weiterreichen" an den "Manager"
ExceptionManager.getInstance().addElementthis );
// Ausgabe in den Debugger (trace und logging)
ExceptionLogger.getInstance().errorname$message ); 
Im ExceptionManager sind nun alle geworfenen Exception "gesammelt". Ich kann diese ganz einfach "abrufen".
PHP-Code:
// Alle Exceptions die nicht "gechated" wurden
var l:Array = ExceptionManager.getInstance().getNotCatchedElements();
// Oder einfach alle
var o:Object;
while( !
ExceptionManager.getInstance().isEmpty ){
  
ExceptionManager.getInstance().getNextElement();
  
traceo.name "/" o.message );

Naja soviel zu meinen Exceptions.

Gruß
Markus
__________________
WEFWEF
ms_hh ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:02 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2014 Marc Thiele