Mit unserem öffentlichen SDK möchten wir in der Regel sehr informative Nachrichten darüber geben, warum eine Ausnahme auftritt. Beispielsweise:
if (interfaceInstance == null)
{
string errMsg = string.Format(
"Construction of Action Argument: {0}, via the empty constructor worked, but type: {1} could not be cast to type {2}.",
ParameterInfo.Name,
ParameterInfo.ParameterType,
typeof(IParameter)
);
throw new InvalidOperationException(errMsg);
}
Dies führt jedoch dazu, dass der Codefluss unübersichtlich wird, da der Schwerpunkt eher auf Fehlermeldungen als auf den Aktionen des Codes liegt.
Ein Kollege hat begonnen, einige der Ausnahmen zu überarbeiten, die sich auf Folgendes auswirken:
if (interfaceInstance == null)
throw EmptyConstructor();
...
private Exception EmptyConstructor()
{
string errMsg = string.Format(
"Construction of Action Argument: {0}, via the empty constructor worked, but type: {1} could not be cast to type {2}.",
ParameterInfo.Name,
ParameterInfo.ParameterType,
typeof(IParameter)
);
return new InvalidOperationException(errMsg);
}
Dies erleichtert das Verständnis der Codelogik, fügt jedoch viele zusätzliche Methoden zur Fehlerbehandlung hinzu.
Was sind andere Möglichkeiten, um das Problem der "Clutter-Logik für Nachrichten mit langen Ausnahmen" zu vermeiden? Ich frage hauptsächlich nach idiomatischem C # /. NET, aber wie andere Sprachen damit umgehen, ist auch hilfreich.
[Bearbeiten]
Es wäre schön, auch die Vor- und Nachteile jedes Ansatzes zu haben.
Exception.Data
Eigenschaft, dem "wählerischen" Ausnahmefangen, dem Aufrufen von Code und dem Hinzufügen eines eigenen Kontexts sowie dem erfassten Aufrufstapel trägt alle Informationen bei, die weitaus weniger ausführliche Nachrichten ermöglichen sollten. Schließlich System.Reflection.MethodBase
sieht es vielversprechend aus, Details bereitzustellen, die an Ihre "Ausnahmekonstruktions" -Methode übergeben werden können.
Exception.Data
. Der Schwerpunkt sollte auf der Erfassung der Telemetrie liegen. Refactoring hier ist in Ordnung, aber es übersieht das Problem.