Domanda

Parto dal presupposto che la maggior parte delle eccezioni definite dall'utente sono eccezioni a livello di Business Logic, ma quali sono alcuni motivi buoni per utilizzare una delle eccezioni definita dall'utente e quali sono alcuni esempi di buone?

E 'unico vantaggio di un'eccezione definita dall'utente che si può definire un messaggio di errore coerente?

Che logica può essere scritto dentro eccezioni per renderli veramente più utile?

Dopo tutto, non puoi semplicemente fare questo: throw new Exception("Some Error Message");

È stato utile?

Soluzione

Avere eccezioni definite dall'utente è utile perché consente di gestire diversi tipi di errori in modi specifici. Perché .NET definisce così tanti tipi diversi di eccezioni se avessero potuto solo gettare come System.Exception tutte le eccezioni con un messaggio di testo diverso? La ragione per cui ci sono diversi tipi di eccezioni in .NET è che si può prendere i singoli tipi di errori e gestirli in modo diverso. Questa è la stessa ragione si dovrebbe definire i propri eccezioni utente - in modo da poter fornire una risposta diversa in base al tipo di eccezione che si è verificata.

È anche possibile creare eccezioni definite dall'utente che includono dati aggiuntivi. Ad esempio, è possibile definire un livello di gravità in base a un enum, un codice di errore intero o qualsiasi altra cosa che potrebbe essere utile al programma chiamante per identificare ciò che è andato storto. Per quanto riguarda la logica per includere nel eccezioni, io in genere cerco solo di riferire cosa è andato storto e lasciare la logica (cosa fare per l'errore) al programma chiamante. In alcuni casi, ho il codice di eccezione scrivere automaticamente l'errore in un file di log, se ha superato un certo livello di gravità (per esempio gli avvisi vengono gettati ma solo errori critici vengono scritti nel file di log).

Altri suggerimenti

Si dovrebbe creare pochissime eccezioni definite dall'utente. Essi dovrebbero essere utilizzati solo se qualcuno sta per intercettare l'eccezione e fare qualcosa di specifico con esso. Se buttare l'eccezione invece di InvalidOperationException non sta andando per rendere il codice si comportano in modo diverso, poi gettare InvalidOperationException.

Ci sono un sacco di eccezioni già il framework .NET, che si dovrebbe usare se si può trovare uno che potrebbe essere utilizzato per la circostanza eccezionale.

Per esempio, nelle mie classi di configurazione (che sono normalmente involucri in tutto il ConfigurationManager) butto ConfigurationErrorsException quando mai un valore non può essere analizzato correttamente.

Durante l'analisi valori personalizzati dal testo o qualcos'altro che richiede un formato specfic e il parsing fallisce, butto un FormatException

Tuttavia, se il mio scopo BankAccount non ha abbastanza soldi in esso per me di ritirare £ 10 poi scriverò e gettare InsufficentFundsException perché poi in questo modo posso gestire quel caso di errore specifico, se mai si verifica.

Spero che questo (un po ') aiuta.

No, non sono solo per i messaggi. È possibile cercare quelli definiti dall'utente nella lista eccezione di un blocco catch.

catch(UserDefinedException){}
catch(Exception){}

È possibile utilizzare eccezioni definite dall'utente in qualsiasi momento si desidera cercare qualcosa di specifico che si verifica. Forse un ID cliente è fuori di un intervallo specificato e si vuole cercare quel modo specifico. Invece di dover analizzare il messaggio di errore (che può essere un dolore, ed è soggetta a errori, come se il messaggio cambia in seguito lungo la strada), si ha un'eccezione si usa e si sa che da qualche altra parte nel codice è specificamente dicendo si "Hey questo è accaduto. è necessario essere a conoscenza di esso."

eccezioni definite dall'utente può essere utilizzato all'interno di un componente per consentire ai consumatori del componente la capacità di prenderli con un livello superiore di granularità poi il blocco catch (Exception). Ciò fornirà al consumatore componente con la capacità di eseguire compiti diversi, in base al quale eccezione è stato gettato. eccezioni definite dall'utente dovrebbero veramente solo essere creati quando c'è una vera e propria aspettativa che i consumatori li utilizzeranno per differenziare in questo modo.

Si può anche aggiungere proprietà per memorizzare ulteriori meta-dati con un'eccezione definita dall'utente, come ad esempio un codice di errore (ad esempio quando si chiama un'API non gestito). Questo è più facile da usare che semplicemente mettendo roba nella proprietà data dell'oggetto Exception.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top