Hallo,
nehmen wir an ich habe eine Liste von Fehlermeldungen, die mein Programm ausgeben kann:
"Datenbankverbindung fehlgeschlagen"
"Konnte nicht aus Datei lesen"
"Nicht genügend Speicher"
und so weiter, und so fort. Nun stellt sich mir die Frage, wie und an welcher Stelle im Programm man so etwas implementieren sollte. Eine lange Liste, wo in jeder Zeile "const string FEHLER_1 "meldung 1"" steht? Das ist irgendwie sehr schwerfällig, oder? Gibt es da eine bequemere Lösung? Und wo sollte man so etwas ablegen? In einer eigenen Klasse, sodass man dann mit "FehlerKlasse.Fehler1" auf die Meldungen zugreifen kann?
Ich würde mich sehr freuen wenn ihr mir sagen könntet wie ihr das handhabt. Vielen Dank!
Hallo barzefutz,
nicht im Programmcode, sondern in ==> Ressourcendateien.
herbivore
Ich verwende statische ExceptionBuilder-Klassen. Es gibt sowohl globale, als auch lokale ExceptionBuilder. Ein globaler ExceptionBuilder ist in meinem Fall immer im Namespace EpiSource.Common.ExceptionBuilders definiert. Ein lokaler ExceptionBuilder ist eine private Unterklasse des Typs, der die generierten Exceptions benötigt. Die notwendigen Strings sind in Ressourcendateien gespeichert. Die für globale ExceptionBuilder in der Datei CommonExceptionMessages.resx, die für lokale ExceptionBuilder gesammelt in der Ressource ExceptionMessages.resx.
AHA! Ressourcendateien! Das ist natürlich schlau 🙂
Kabelsalat: Was ist denn ein ExceptionBuilder? Hast du den selber geschrieben? Ich konnte nach kurzer Recherche nichts dazu finden 😦
Danke euch beiden!
Hier ein Beispiel für einen ExceptionBuilder:
using System;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using EpiSource.Common.Resources;
namespace EpiSource.Common.ExceptionBuilders
{
/// <summary>
/// Builds common <seealso cref="ArgumentOutOfRangeException" />s with consistent exception messages.
/// </summary>
public static class ArgumentOutOfRangeExceptionBuilder
{
// (...)
#region BuildIndexOutOfRangeException
/// <summary>
/// (...)
/// </summary>
public static ArgumentOutOfRangeException BuildIndexOutOfRangeException()
{
return BuildIndexOutOfRangeException(null, null, null);
}
/// <summary>
/// (...)
/// </summary>
public static ArgumentOutOfRangeException BuildIndexOutOfRangeException(string parameterName)
{
return BuildIndexOutOfRangeException(parameterName, null, null);
}
/// <summary>
/// (...)
/// </summary>
public static ArgumentOutOfRangeException BuildIndexOutOfRangeException(object actualValue)
{
return BuildIndexOutOfRangeException(null, actualValue, null);
}
/// <summary>
/// (...)
/// </summary>
public static ArgumentOutOfRangeException BuildIndexOutOfRangeException(Exception innerException)
{
return BuildIndexOutOfRangeException(null, null, innerException);
}
/// <summary>
/// (...)
/// </summary>
public static ArgumentOutOfRangeException BuildIndexOutOfRangeException(string parameterName, object actualValue)
{
return BuildIndexOutOfRangeException(parameterName, actualValue, null);
}
/// <summary>
/// (...)
/// </summary>
public static ArgumentOutOfRangeException BuildIndexOutOfRangeException(string parameterName, object actualValue, Exception innerException)
{
return BuildArgumentOutOfRangeException(CommonExceptionMessages.ArgumentOutOfRange_IndexOutOfRange, parameterName, actualValue, innerException);
}
#endregion
// (...)
}
}
Hallo,
danke für deine Mühe. Ich glaube das ist zu hoch für mich, habe zumindest so gut wie nichts verstanden. Wo ist denn die BuildIndexOutOfRangeException definiert und was ist das überhaupt?
Hallo barzefutz,
Wo ist denn die BuildIndexOutOfRangeException definiert ...
das sind doch alles selbst definierte Methoden. Die sind eben in class ArgumentOutOfRangeExceptionBuilder definiert. Die Frage ist eher, wo ist die BuildArgumentOutOfRangeException-Methode definiert. Ich vermute in dem "(...)"-Teil.
... und was ist das überhaupt?
Fabrikmethoden zur Erzeugen von Exceptions. Siehe http://de.wikipedia.org/wiki/Fabrikmethode
herbivore
Original von herbivore
Die Frage ist eher, wo ist die BuildArgumentOutOfRangeException-Methode definiert. Ich vermute in dem "(...)"-Teil.
Richtig: Es handelt sich um eine private Helfer-Methode der selben Klasse.