Pergunta

Eu diria que a maioria das Exceções de definido pelo Usuário são para a Lógica de Negócios de nível exceções, mas o que são alguns bons motivos para usar uma Exceção Definido pelo Usuário e quais são alguns bons exemplos?

É uma exceção definido pelo usuário a única vantagem que você pode definir um consistente Mensagem de Erro?

Qual a lógica pode ser escrito dentro de exceções para torná-los verdadeiramente mais útil?

Depois de tudo, você não pode fazer isso: throw new Exception("Some Error Message");

Foi útil?

Solução

Ter exceções definidas pelo usuário é útil porque permite lidar com diferentes tipos de erros de maneiras específicas. Por que o .NET define tantos tipos diferentes de exceções se eles poderiam apenas lançar todas as exceções como sistema.Exception com uma mensagem de texto diferente? A razão pela qual existem diferentes tipos de exceções no .NET é que você pode capturar tipos individuais de erros e lidar com eles de maneira diferente. Esse é o mesmo motivo pelo qual você definiria suas próprias exceções de usuário - para poder fornecer uma resposta diferente com base no tipo de exceção que ocorreu.

Você também pode criar exceções definidas pelo usuário que incluem dados adicionais. Por exemplo, você pode definir um nível de gravidade com base em uma enumeração, um código de erro inteiro ou qualquer outra coisa que possa ser útil para o programa de chamada para identificar o que deu errado. Quanto à lógica para incluir em exceções, geralmente tento relatar o que deu errado e deixar a lógica (o que fazer sobre o erro) ao programa de chamada. Em alguns casos, tenho o código de exceção, escreva automaticamente o erro em um arquivo de log se ele exceder um certo nível de gravidade (por exemplo, avisos são lançados, mas apenas erros críticos são gravados no arquivo de log).

Outras dicas

Você deve criar muito poucas exceções de definido pelo usuário.Eles só devem ser utilizados se alguém está indo para capturar a exceção e fazer algo específico com ele.Se jogando sua exceção, em vez de InvalidOperationException não vai fazer com que o código se comportam de maneira diferente, em seguida, atirar InvalidOperationException.

Já existem muitas exceções na estrutura .NET, que você deve usar se puder encontrar uma que possa ser usada para sua circunstância excepcional.

Por exemplo, nas minhas classes de configuração (que normalmente são embalagens ao redor do ConfigurationManager) Eu jogo ConfigurationErrorsException Sempre que um valor não pode ser analisado corretamente.

Ao analisar valores personalizados do texto ou algo mais que requer um formato específico e a análise falha, eu jogo um FormatException

No entanto, se meu BankAccount Objeto não tem dinheiro suficiente para eu retirar 10 libras, então vou escrever e jogar InsufficentFundsException Porque então, assim, posso lidar com esse caso de erro específico, se ocorrer.

Espero que isso (um pouco) ajude.

Não, eles não são apenas para mensagens. Você pode procurar os definidos pelo usuário na lista de exceção de um bloco de captura.

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

Você pode usar exceções definidas pelo usuário sempre que desejar procurar algo específico que ocorra. Talvez um ID de cliente esteja fora de um intervalo especificado e você queira procurar isso especificamente. Em vez de ter que analisar a mensagem de erro (que pode ser uma dor e é propensa a erros, como se a mensagem mudar mais tarde), você tem uma exceção que usa e sabe que em outro lugar do código está dizendo especificamente Você "Ei, isso aconteceu. Você precisa estar ciente disso."

Exceções definidas pelo usuário podem ser usadas em um componente para permitir que os consumidores do componente a capacidade de captá -los com um nível maior de granularidade do que o bloco de captura (exceção). Isso fornecerá ao consumidor componente a capacidade de executar tarefas diferentes, com base nas quais a exceção foi lançada. Exceções definidas pelo usuário só devem ser realmente criadas quando houver uma expectativa real de que os consumidores os usem para se diferenciar dessa maneira.

Você também pode adicionar propriedades para armazenar metadados adicionais com uma exceção definida pelo usuário, como um código de erro (por exemplo, ao chamar uma API não gerenciada). Isso é mais fácil de usar do que simplesmente colocar as coisas na propriedade de dados do objeto de exceção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top