Con il nostro SDK pubblico, tendiamo a voler fornire messaggi molto istruttivi sul motivo per cui si verifica un'eccezione. Ad esempio:
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);
}
Tuttavia, questo tende a ingombrare il flusso del codice, in quanto tende a concentrarsi maggiormente sui messaggi di errore piuttosto che sul codice.
Un collega ha iniziato a rifattorizzare parte dell'eccezione lanciata a qualcosa del genere:
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);
}
Il che rende la logica del codice più facile da capire, ma aggiunge molti metodi extra per la gestione degli errori.
Quali sono altri modi per evitare il problema della "logica dell'ingombro dei messaggi a lunga eccezione"? Sto principalmente chiedendo di C # /. NET idiomatico, ma anche il modo in cui altri linguaggi lo gestiscono.
[Edit]
Sarebbe bello avere anche i pro ei contro di ciascun approccio.