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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07-12-2007, 18:35   #1 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg
Beiträge: 4.388
Exceptions über zentrale Klasse schmeißen?

Hallo,
ich bin grade am überlegen, ob es nicht geschickt wäre, keine Exceptions mehr direkt zu schmeißen, sondern nur indirekt über eine Klasse, die das für mich macht.
Der Vorteil wäre, dass ich in der fertigen Anwendung dann einfach das schmeißen von Exceptions deaktivieren könnte, und statt dessen eingehende Exceptions protokollieren, und dann feste die Daumen drücken, dass die Anwendung trotzdem weiter läuft. Denn in den meisten Fällen sind die Exceptions ja mehr Warnungen als fatale Fehler.
Ich glaube es käme besser beim Anwender an, wenn die Anwendung irgendwie so lang läuft wie möglich, und sich nicht beim ersten Wehwehchen verabschiedet.
Was haltet ihr von der Idee? Irgendein grober Denkfehler irgendwo?

Gruß, Janosch
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 07-12-2007, 20:52   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.419
In der fertigen Anwendung sollte es nicht mehr zum Aufkommen von Exceptions kommen. Wenn es trotzdem zur Laufzeit zu Fehlern kommt - was auch schlecht ist, solltest du entsprechende Fehlerbehandlungen einbauen.

Denn dafür sind sie da.

Hier vielleicht 3 interessante Links für dich: Exceptions
Omega Psi ist offline   Mit Zitat antworten
Alt 08-12-2007, 00:03   #3 (permalink)
undefined
 
Benutzerbild von mildesign
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 1.859
Guter Lesestoff.

Auf AS3 übertragen kann man schlussfolgern:

"Throw early catch late"

Wenn der Client was gegen die Exception machen kann die Exception weiterleiten ansonsten loggen oder die Ausführung des Programms unterbrechen.

Niemals eine Exeption mit einem leeren catch block "verarbeiten"

Checked und unchecked Exeption gibt es ja in AS3 noch nicht somit entfällt diese Entscheidung
__________________
mfg Frank
mildesign ist offline   Mit Zitat antworten
Alt 08-12-2007, 09:15   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.419
Sagen wir mal so: throw early and catch at the right time
Omega Psi ist offline   Mit Zitat antworten
Alt 08-12-2007, 14:39   #5 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 923
Das mit der Klasse habe ich auch schonmal gemacht. Vor allem deshalb, weil Flex manche Exceptions selbst catched und dann zum Teil verschluckt.
In der Klasse habe ich dann eine Exception geschmissen und sofort gecatched um den Stacktrace zu bekommen und dann per Timer verzögert als Alert ausgegeben. Die Verzögerung hatte ich eingebaut um aus dem aktuellen Kontext rauszukommen.
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D
hazy fantazy ist offline   Mit Zitat antworten
Alt 10-12-2007, 10:44   #6 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg
Beiträge: 4.388
Exceptions können sehr wohl im fertigen Produkt auftreten, sie müssen dann nur angemessen gehandhabt werden.
Das Problem an einer solchen Exception-Schmeiß-Klasse ist also, dass, deaktiviere ich die Exceptions im fertigen Betrieb, auf diese Exceptions nicht mehr reagiert werden kann. Zwar werden sie von der Klasse geloggt, aber lösen kann das Problem dann keiner mehr.

Was mir jetzt aber Sorgen macht, ist, dass viele Exceptions letzten Endes vom Benutzer (sprich im Code irgendeinem Componenten-Listener) ausgelöst werden. Um diese Exceptions zu fangen, müsste man jeden Listener mit try-catch versehen, und das mache vielleicht ich, aber das machen nicht alle anderen, die hier an so einer Anwendung arbeiten.

Schwierig, was macht man da? Am liebsten würde ich irgendwie alle Exceptions gaaanz oben fangen, und dort dann loggen, denn andernfalls gehen sie ja einfach verloren, oder?

Zitat:
Zitat von hazy fantazy Beitrag anzeigen
Vor allem deshalb, weil Flex manche Exceptions selbst catched und dann zum Teil verschluckt.
Wie meinst du das? Hast du da ein Beispiel?
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 10-12-2007, 11:51   #7 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 923
Ja, wenn z.B. eine Nullpointer Exception innerhalb eines Bindings auftritt, wird sie vom Flexframework gecatched.

Code:
   <mx:Script>
      <![CDATA[
         [Bindable] private var content : String;
         
         private function formatContent( input : String ) : String
         {
            trace("formatContent 1", input );
            var length : int = input.length;
            trace("formatContent 2", length ); //hier kommst du nicht hin, solange content null ist
            return length + ":" + content;
         }
      ]]>
   </mx:Script>
   
   <mx:Label text="{ formatContent( content )}"/>
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D
hazy fantazy ist offline   Mit Zitat antworten
Alt 10-12-2007, 12:06   #8 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.419
Ja, Exceptions können immer mal wieder auftreten (beispielsweise wenn ein Web Service nicht erreichbar ist). Aber deswegen gibt es ja try { ... } catch (e:Error) { ... } finally { ... }. Ich hab's mir auch erst wieder in ActionScript angewöhnt. Mittlerweile ziehe ich es aber wieder konsequent durch.

Ich hatte mich da auch falsch ausgedrückt. Wieso solltest du die Exceptions und Fehlerbehandlungen rauswerfen im fertigen Produkt?
Omega Psi ist offline   Mit Zitat antworten
Alt 10-12-2007, 13:11   #9 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg
Beiträge: 4.388
Wie eingangs geschrieben wäre es in den meisten Fehlerfällen besser, die fertige Anwendung würde einfach weiterlaufen (wie im guten alten Flash 6), statt sich zu verabschieden. Daher wäre es reizvoll, alle Exceptions auf oberster Ebene zu loggen und sonst zu ignorieren.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 10-12-2007, 13:24   #10 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.419
Aber das ist doch keine effiziente Fehlerbehandlung oder nicht? Wenn ein Error geworfen wird, dann sollte man doch auf diesen angemessen reagieren und ihn nicht einfach ignorieren.

Gerade in der fertigen Anwendung sollten Fehler vom System angemessen behandelt werden und nicht einfach ignoriert werden und geloggt werden.

Oder sehe ich das falsch?
Omega Psi ist offline   Mit Zitat antworten
Alt 10-12-2007, 13:36   #11 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 923
Ich finde es gibt (mindestens) zwei Arten von Fehlern. Solche, die nur während der Entwicklung auftreten können und solche, die später noch auftreten können. Entwicklungsfehler will ich einfach nur möglichst schnell sehen. Die anderen sollten nach Möglichkeit entsprechend behandelt werden.
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D
hazy fantazy ist offline   Mit Zitat antworten
Alt 10-12-2007, 13:37   #12 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg
Beiträge: 4.388
Du siehst das schon richtig, nur in der Realität treten halt dann in der fertigen Anwendung doch Fehler auf, mit denen keiner gerechnet hat, und die so schnell auch nicht behoben werden. Wie geht man mit diesen Fehlern um?
Es ist ja nicht so, dass Flash "nur" wegen einer NullPointerException gleich das ganze System mit sich reißen würde, viel mehr würde dann eben in einem speziellen Fall eine spezielle Funktion den Dienst versagen.
Und genau hier denke ich wäre es eben am besten, wenn man ganz allgemein (und zentral) nicht gefangene Ausnahmen loggen und sonst ignorieren könnte. Vielleicht auch dem Benutzer die Wahl lassen, ob er den Fehler ignorieren, oder weitermachen will.

EDIT: Im Debug-Player gibt es ja genau sowas, aber im normalen Player werden die Exceptions einfach ignoriert (ohne Log eintrag!)
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)

Geändert von Janoscharlipp (10-12-2007 um 13:39 Uhr)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 10-12-2007, 15:08   #13 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 923
Ich würde erstmal sammeln und loggen.
Welche Exceptions von Bedeutung sind und weiter verarbeitet werden müssen, kannst du dann später entscheiden.
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D
hazy fantazy ist offline   Mit Zitat antworten
Alt 10-12-2007, 15:18   #14 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg
Beiträge: 4.388
Wie gesagt, dass zuverlässig gesammelt wird liegt nicht allein in meiner Hand.
Natürlich soll alles abgefangen werden, wird es aber real nicht.
(kennt ihr sicher aus Eclipse oder FlashDevelop, irgendwann kommt immer mal das Fenster mit zwei Knöpfen: continue oder exit)
Und genau so ein Fenster will ich auch machen können, OHNE den Debug-Player.
Die mx.core.Application hat ein "error" Event, leider fliegt das nur bei Übertragungsfehlern, nicht bei irgendwelchen eigenen Exceptions
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 10-12-2007, 15:24   #15 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 923
No chance. So einen globalen Handler gibt es leider nicht.
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D
hazy fantazy 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 11:04 Uhr.

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


Copyright ©1999 – 2014 Marc Thiele