![]() |
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:
Es kann jedoch sein, das das Gerät nicht Antwortet oder falsch Antwortet etc...
einGeraet.Get_Seriennummer(SN);
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 |
Re: Kommunikationsfehler nach aussen melden
Zitat:
|
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 |
Re: Kommunikationsfehler nach aussen melden
Zitat:
Delphi-Quellcode:
oder mit einer selbstdefinierten Exception Klasse:
raise Exception.Create('Das Gerät antwortet nicht');
Delphi-Quellcode:
oder noch mit einem Fehlercode, der die Fehlermeldung weiter spezifiziert
raise EDeviceNotAvailable.Create;
Delphi-Quellcode:
if Is4711Error then
raise EDeviceNotAvailable.Create(4711); |
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 |
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 04:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz