C #: Lançando práticas recomendadas de exceção personalizada
Li algumas das outras perguntas sobre práticas de manipulação de exceções em C #, mas nenhuma parece perguntar o que estou procurando.
Se eu implementar minha própria exceção personalizada para uma classe ou conjunto de classes específico. Todos os erros relacionados a essas classes devem ser encapsulados em minha exceção usando exceção interna ou devo deixá-los cair?
Eu estava pensando que seria melhor capturar todas as exceções para que a exceção pudesse ser reconhecida imediatamente da minha fonte. Ainda estou passando a exceção original como uma exceção interna. Por outro lado, eu estava pensando que seria redundante refazer a exceção.
Exceção:
class FooException : Exception
{
//...
}
Opção 1: Foo encerra todas as exceções:
class Foo
{
DoSomething(int param)
{
try
{
if (/*Something Bad*/)
{
//violates business logic etc...
throw new FooException("Reason...");
}
//...
//something that might throw an exception
}
catch (FooException ex)
{
throw;
}
catch (Exception ex)
{
throw new FooException("Inner Exception", ex);
}
}
}
Opção 2: Foo lança FooExceptions específicas, mas permite que outras exceções se abram:
class Foo
{
DoSomething(int param)
{
if (/*Something Bad*/)
{
//violates business logic etc...
throw new FooException("Reason...");
}
//...
//something that might throw an exception and not caught
}
}