Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kommunikationsfehler nach aussen melden (https://www.delphipraxis.net/130162-kommunikationsfehler-nach-aussen-melden.html)

DelphiManiac 4. Mär 2009 10:24


Kommunikationsfehler nach aussen melden
 
Hallo,

ich habe mal eine Frage, wie würdet ihr folgendes lösen:

Es gibt ein Geraeteklasse welche Methoden hat um Daten aus dem Gerät zu lesen.

Also bspw:

Delphi-Quellcode:
einGeraet.Get_Seriennummer(SN);
Es kann jedoch sein, das das Gerät nicht Antwortet oder falsch Antwortet etc...

Bisher habe ich es so gemacht, dass jede Kommunikationsmethode eine ID zurückgibt (sozusagen den Fehlercode).
Das ist jedoch sehr umständlich.

Könnte mann es nicht vielleicht über Exceptions lösen, dass man dann die Exception wirft, wenn ein Fehler auftritt und dann eine Meldung ausgibt, die Schnittstelle schließt, oder sonst was macht???

Ich habe Exception bisher selten eingesetzt, wollte nur mal hören, ob dieser Ansatz Sinn macht, oder ob ihr vielleicht einen besseren habt.

Vielen Dank

MfG
DM

mjustin 4. Mär 2009 13:32

Re: Kommunikationsfehler nach aussen melden
 
Zitat:

Zitat von DelphiManiac

Ich habe Exception bisher selten eingesetzt, wollte nur mal hören, ob dieser Ansatz Sinn macht, oder ob ihr vielleicht einen besseren habt.

Klar, das ist einer der besten Anwendungsfälle für Exceptions. Fehlercodes zurückzugeben hilft nicht, da man diese ja als Aufrufer auch ignorieren kann (oder übersehen, es muss ja nicht absichtlich sein).

DelphiManiac 4. Mär 2009 13:39

Re: Kommunikationsfehler nach aussen melden
 
Hi,

ja das passiert mir oft, dass ich eben keine Überprüfung mache auf den Rückgabewert.

Wie könnte denn so ein Exception Wurf aussehen, könntest du mir da ein paar Zeilen Code geben?
Danke
Gruß
DM

mjustin 4. Mär 2009 13:50

Re: Kommunikationsfehler nach aussen melden
 
Zitat:

Zitat von DelphiManiac
Hi,

ja das passiert mir oft, dass ich eben keine Überprüfung mache auf den Rückgabewert.

Wie könnte denn so ein Exception Wurf aussehen, könntest du mir da ein paar Zeilen Code geben?
Danke
Gruß
DM

ganz einfach:

Delphi-Quellcode:
raise Exception.Create('Das Gerät antwortet nicht');
oder mit einer selbstdefinierten Exception Klasse:

Delphi-Quellcode:
raise EDeviceNotAvailable.Create;
oder noch mit einem Fehlercode, der die Fehlermeldung weiter spezifiziert

Delphi-Quellcode:
if Is4711Error then
  raise EDeviceNotAvailable.Create(4711);

DelphiManiac 4. Mär 2009 14:13

Re: Kommunikationsfehler nach aussen melden
 
Super, danke dir.

Nochmal ne Frage zur Exceptionklasse, was kann ich dann z.B.: mit dem im Konstruktor übergebenen Fehlercode machen.
Bzw. die Exceptionklasse kann / sollte welche Funktionalität implementieren?

Was wäre da sinnvoll?!

Gruß
DM

jfheins 4. Mär 2009 16:25

Re: Kommunikationsfehler nach aussen melden
 
Die Exceptionklasse sollte

=> Einen aussagekräftigen namen haben. Also nicht EGeneralError
=> Felder für die Werte, die dazu geführt haben könnten.

Ein Beispiel:

ECommunicationTimeout
Felder z.B.
Timeout (Wie lange wurde gewartet?)
Address/Object (Worauf wurde gewartet?)
LastCmd (Was war der letzte Befehl, der gesendet wurde (evtentuelle Fehlerursache))

Methode z.B. .ToString() (um die ganzen Felder bequem zu verpacken, z.B. erweiterte Anzeige oder Logdatei)

seperate Klassen sind den Fehlercodes aber vorzuziehen, da man Exceptions nach Klasse filtern kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:48 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