2010-03-06 7 views
6

Suchen Sie nach Vorschlägen/Best Practices zum Verwalten von Fehlercodes und Nachrichten in einer mehrschichtigen Anwendungen. Insbesondere Dinge wie:Ansätze für Fehlercode/Nachrichtenverwaltung in .NET

  1. Wo sollten Fehlercodes definiert werden? Enum? Klasse?
  2. Wie sind Fehlermeldungen oder weitere Details mit den Fehlercodes verbunden? Ressourcendateien? Attribute auf Enum-Werte usw.?
  3. Wenn Sie eine mehrschichtige Anwendung haben, die beispielsweise aus DAL, BLL, UI und gemeinsamen Projekten besteht, sollte es eine einzige riesige Liste von Codes für alle Tiers geben, oder sind die Codes nach Projekt/Tier erweiterbar?

Update: Wichtig zu erwähnen, dass ich nicht allein auf Ausnahmen und benutzerdefinierten Ausnahmetypen für die Fehlerberichterstattung verlassen können, da einige Kunden für diese Anwendung wird

über Web-Services (SOAP & REST) ​​sein Irgendwelche Vorschläge willkommen!

Antwort

2

Ich denke, es ist besser, ein gemeinsames Projekt (oder ApplicationFramework Project) und stellen Sie Ihre Ausnahmen und Common Object auf sie zu schaffen.

Es ist immer eine gute Idee, eine ApplicationFramework zu haben, die für Ihre Klassen Basisklasse enthält (speziell in UI - PageBase - MasterBase- Module und etc)

Und als offensichtlich müssen Sie Ihre Klassen setzen und Enums in Ihrem BLL Projekt.

Beachten Sie, dass 3 Tier nicht 3 Projekt bedeutet. Sie können 5 Projekte in Ihrem BLL haben.

Schließlich vergessen Sie nicht, ELMAH oder andere ähnliche Tools zu verwenden.

6

Fehlercodes sind alt skool, Sie brauchten sie zurück in den schlechten alten Tagen der COM- und C-Programmierung, Umgebungen, die Ausnahmen nicht unterstützt. Heutzutage verwenden Sie Ausnahmen, um den Client-Code oder den Benutzer über Probleme zu informieren. Ausnahmen in .NET sind selbstbeschreibend, sie haben einen Typ, eine Nachricht und Diagnosen.

Sie müssen zwei Arten von Ausnahmen unterscheiden, diejenigen, die einigermaßen wiederherstellbar sind und solche, bei denen Sie keine Ahnung haben, was genau schiefgelaufen ist oder wie Sie von ihnen wiederherstellen. Die letztere Art ist bei weitem am häufigsten, Sie brauchen einen Menschen, um Korrekturmaßnahmen zu ergreifen. Verwenden Sie einen der integrierten Standard-.NET-Ausnahmetypen, um diese zu erhöhen. IllegalOperationException, FormatException, ArgumentException sind gängige Optionen. Wenn es das Back-End ist, das eine solche Ausnahme auslöst, dann wollen Sie es einfach passieren, ohne es zu ändern. Normalerweise benötigen Sie einen finally-Block, um sicherzustellen, dass Ihr interner Zustand konsistent ist, manchmal einen catch-Block, der einen einfachen throw-to-recover-Status enthält.

Alles, was Sie als wiederherstellbar betrachten, sollte mit einem von Ihnen definierten Ausnahmetyp ausgelöst werden, der von der Exception-Klasse abgeleitet ist. Das gibt Code Upstream eine Chance, eine Fangklausel zu schreiben und etwas Sinnvolles zu tun. Sie müssen eine Nachricht erstellen, die das Problem beschreibt. Falls der Upstream-Code dies nicht tut, muss der Text der Nachricht entweder von einer fest codierten Zeichenkette oder einer Ressource abgerufen werden Lokalisierung unterstützen

+0

Danke für die Eingabe. Ich habe die ursprüngliche Frage aktualisiert, um zu erwähnen, dass ich mich nicht ausschließlich auf Ausnahmen verlassen kann, da einige Clients über Webdienste und speziell REST-Webdienste, die nicht das Konzept von "Ausnahmetypen" haben, sind. Ein Blick auf einige der Internet-APIs (Facebook, Flickr, etc.) führt mich zu der Annahme, dass Fehlercodes in dieser Verwendung der richtige Weg sind. – WayneC

+0

@WayneC: SOAP-Webdienste haben Zugriff auf SOAP-Fehler. Schade, dass REST es erfordert, dass Sie zu Anfang der 90er Jahre zurückkehren. –

+0

@John: Sagst du, dass REST-APIs die "frühen 90er Jahre" sind? Jemand besser sagen Facebook, Flickr, Netflix, Twitter, Google, etc., die sie mit der Zeit bekommen sollten! :-) Auch mit dem Ausnahmeansatz können Fehlercodes immer noch wertvoll sein, um eine Ausnahme weiter zu kategorisieren. Wenn Sie beispielsweise eine benutzerdefinierte ValidationException haben, könnten Sie Fehlercodes haben, um den Typ der fehlgeschlagenen Validierung im Detail zu beschreiben, anstatt einen neuen benutzerdefinierten Ausnahmetyp für jedes Validierungsszenario zu erstellen. – WayneC

Verwandte Themen