2 Stimmen

Ausnahme oder Rückgabestatus für Komponenten, die mit Fehlern arbeiten können

Ich bin gerade dabei, ein System zu entwerfen, das die Verarbeitung verschiedener Dateitypen übernimmt. Ich habe die folgende Schnittstelle definiert

public interface IFileProcessor
{
    bool ProcessFile(string fileContents)
}

mit dem Ziel, eine Reihe konkreter Implementierungen zur Verarbeitung verschiedener Dateitypen zu schaffen. Eine Controllerklasse wird für Folgendes verantwortlich sein:

  • Überwachen eines Ordners auf eine neu hinzugefügte Datei
  • Lesen des Dateiinhalts
  • Abrufen einer Sammlung dieser konkreten IFileProcessor-Implementierungen
  • Rufen Sie nacheinander die Funktion ProcessFile() für jede Komponente auf und übergeben Sie den Inhalt der Datei
  • Wenn eine Komponente die Datei nicht verarbeiten kann, wird false zurückgegeben, andernfalls wird sie den Inhalt verarbeiten und true zurückgeben
  • Wenn keine IFileProcessor-Implementierung die Datei verarbeiten kann, wird sie von der Kontrollstelle in einen Ordner "UnProcessed" verschoben
  • Wenn eine Komponente die Datei erfolgreich verarbeitet, wird sie in den Ordner "Verarbeitet" verschoben.
  • Wenn eine Komponente eine Ausnahme auslöst, wird sie in den Ordner "Failed" verschoben.

Ich erstelle eine Implementierung von IFileProcessor, die zunächst prüfen, ob es die Datei auf der Grundlage des Typs (d.h. csv) verarbeiten kann und dann einige Top-Level-Validierung (d.h. überprüfen Sie Datei-Header) durchführen wird. Wenn eine dieser Prüfungen fehlschlägt, wird eine Ausnahme an den Controller ausgelöst, da die gesamte Datei als ungültig angesehen wird.

Sobald jedoch die Validierung auf oberster Ebene erfolgreich war, wird die Komponente jede Zeile der Datei verarbeiten. Von diesem Zeitpunkt an ist es akzeptabel, dass eine einzelne Zeile die Verarbeitung (d. h. die Validierung) nicht besteht und der Rest des Prozesses fortgesetzt wird.

Dies ist, wo das Problem liegt, ich frage mich, wenn seine beste zu protokollieren, dass Validierungsfehler aufgetreten sind und dann eine Ausnahme am Ende des Prozesses werfen, oder die ProcessFile()-Signatur zu ändern, um ein Enum (eine von Processed, UnProcessed, ProcessedWithErrors) zurückgeben?

Von dem, was ich gelesen habe, scheint es, dass Ausnahmen der bevorzugte Weg gegenüber Statuscodes sind, jedoch in diesem besonderen Umstand, wo ein Prozess fortgesetzt werden kann, scheint es falsch, eine künstliche Ausnahme am Ende zu verwenden, um anzugeben, dass der Prozess nicht 100 % abgeschlossen hat.

Es würde mich wirklich interessieren, was die Leute darüber denken.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X