Laden...

Fehlercodes und -meldungen im Programmcode ablegen

Erstellt von barzefutz vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.448 Views
B
barzefutz Themenstarter:in
95 Beiträge seit 2007
vor 16 Jahren
Fehlercodes und -meldungen im Programmcode ablegen

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!

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo barzefutz,

nicht im Programmcode, sondern in ==> Ressourcendateien.

herbivore

369 Beiträge seit 2006
vor 16 Jahren

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.

B
barzefutz Themenstarter:in
95 Beiträge seit 2007
vor 16 Jahren

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!

369 Beiträge seit 2006
vor 16 Jahren

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

		// (...)
	}
}

B
barzefutz Themenstarter:in
95 Beiträge seit 2007
vor 16 Jahren

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?

49.485 Beiträge seit 2005
vor 16 Jahren

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

369 Beiträge seit 2006
vor 16 Jahren

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.