Descubra Como Criar Roslyn Analyzers e Melhorar Seu Código
Exceções Customizadas: Simplificando o Debug no Código
Imagine se o seu programa de controle de estoque está prestes a lançar um erro genérico “Exception” que não diz nada sobre o que realmente aconteceu. Já pensou na dor de cabeça para entender a causa real? Isso é um sinal de que está na hora de criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. exceções customizadas
💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código.! Elas servem para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! fornecer mensagens claras, específicas e alinhadas com a lógica do seu negócio - tornando a resolução de problemas muito mais simples e intuitiva.
A ideia é bem simples: em vez de usar apenas as exceções “prontas” do C#, você pode criar suas próprias classes que herdam de “Exception” (ou outra classe base🧬 Herança: Reutilize Código sem Copiar e Colar (como um Jedi)!Aprenda a utilizar herança em C# para criar hierarquias de classes, reaproveitar código e manter projetos organizados de forma simples e escalável.) para representar situações de erro da forma que faça sentido para o seu domínio, como “EstoqueInsuficienteException” ou “UsuarioNaoAutorizadoException”.
Tabela de Conteúdo🔗
- Por que Criar Exceções Customizadas
💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código.?
- Estrutura Básica de uma Exceção Customizada
💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código.
- Exemplo Prático
📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável.: Criando Exceções que Falam a sua Língua
- Boas Práticas
🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. de Nomenclatura e Organização
- Vantagens e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Possíveis Desvantagens
- Conclusão
- Hierarquia de Exceções
💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código.: Organizando o Caos
- Integração com APIs REST
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos.
Por que Criar Exceções Customizadas?🔗
A principal razão é clareza. Com exceções💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. definidas por você, suas mensagens de erro ficam mais próximas da regra de negócio ou do contexto do problema. Em vez de receber um genérico e assustador “Exception”, você pode ter algo como “EstoqueInsuficienteException” para deixar explícito o que deu errado.
Além disso, quando alguém (ou até mesmo você no futuro) for depurar o código, ter uma exceção com nome autoexplicativo acelera muito a identificação do problema🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes..
Cenário real: Sistema bancário
// ❌ Ruim: Exceção genérica
if (saldo < valorSaque)
throw new InvalidOperationException("Operação inválida");
// ✅ Bom: Exceção específica
if (saldo < valorSaque)
throw new SaldoInsuficienteException(saldo, valorSaque);
Vantagens:
- 🎯 Precisão: Erros
🎲 Desafio: Crie um Sistema de Login com Tratamento de Erros Robusto!Aprenda a criar um sistema de login robusto em C#, com tratamento de erros adequado, validação e segurança para evitar vulnerabilidades. falam a linguagem do domínio
- 🔍 Debug: Metadados
📜 Atributos Customizados: Metadados que Guiam seu Código!Descubra como atributos customizados potencializam a organização do código, facilitam auditorias e testes, e garantem eficiência. específicos no objeto da exceção
- 🚦 Controle: Captura seletiva de erros
🎲 Desafio: Crie um Sistema de Login com Tratamento de Erros Robusto!Aprenda a criar um sistema de login robusto em C#, com tratamento de erros adequado, validação e segurança para evitar vulnerabilidades. no
catch
Estrutura Básica de uma Exceção Customizada🔗
Uma exceção customizada💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. em C# costuma herdar de Exception (ou de outra exceção
💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. base mais específica), e segue esta estrutura:
public class MinhaExcecaoPersonalizada : Exception
{
public MinhaExcecaoPersonalizada() { }
public MinhaExcecaoPersonalizada(string message)
: base(message)
{
}
public MinhaExcecaoPersonalizada(string message, Exception inner)
: base(message, inner)
{
}
}
1. Herdar de Exception: É o ponto de partida para qualquer exceção💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. personalizada.
2. Construtores🔑 Construtores: Inicialize Objetos como um Arquiteto de OOP!Descubra como os construtores em C# estruturam objetos, garantindo inicialização segura e promovendo boas práticas de desenvolvimento orientado a objetos.: Normalmente você replica os construtores
🔑 Construtores: Inicialize Objetos como um Arquiteto de OOP!Descubra como os construtores em C# estruturam objetos, garantindo inicialização segura e promovendo boas práticas de desenvolvimento orientado a objetos. que recebe de “Exception”, para não perder nenhuma funcionalidade.
3. Properties extras (opcional): Se você precisar armazenar dados específicos do erro, pode criar propriedades⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. adicionais na sua classe.
Exemplo Prático: Criando Exceções que Falam a sua Língua🔗
Pense num sistema de vendas que precisa checar o estoque antes de concluir a compra. Se não houver livros suficientes em estoque, faz sentido lançar uma exceção💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. “EstoqueInsuficienteException”. Assim:
public class EstoqueInsuficienteException : Exception
{
public int QuantidadeDisponivel { get; private set; }
// Construtor base
public EstoqueInsuficienteException()
: base("Estoque insuficiente para completar a operação.")
{
}
// Construtor que recebe uma mensagem
public EstoqueInsuficienteException(string message)
: base(message)
{
}
// Construtor que aceita a quantidade disponível para enriquecer o erro
public EstoqueInsuficienteException(string message, int quantidadeDisponivel)
: base(message)
{
QuantidadeDisponivel = quantidadeDisponivel;
}
}
Quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. você for verificar o estoque:
int estoqueAtual = 5;
int quantidadeSolicitada = 10;
if (quantidadeSolicitada > estoqueAtual)
{
throw new EstoqueInsuficienteException(
$"Quantidade solicitada excede o estoque disponível!",
estoqueAtual
);
}
Veja como a exceção💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. não apenas deixa claro que o estoque é insuficiente, mas também informa quantas unidades estão realmente disponíveis, caso você queira exibir essa informação para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! quem fez a requisição.
Boas Práticas de Nomenclatura e Organização🔗
- Nomes significativos: Use o sufixo “Exception” e garanta que o prefixo descreva o evento ou o cenário que causou o problema
🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes..
- Seja conciso: “ArquivoNaoEncontradoException” ou “UsuarioNaoAutorizadoException” comunicam claramente a situação.
- Agrupamento
🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. por módulo: Se for criar muitas exceções
💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código., considere organizá-las em pastas (ex.: “Excecoes/Estoque/EstoqueInsuficienteException.cs”).
Mantenha coerência e consistência para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! que toda a equipe saiba de imediato sobre o que o seu custom exception se trata.
Vantagens e Possíveis Desvantagens🔗
Pontos Positivos | Pontos Negativos |
---|---|
Melhora a clareza ao lidar com erros específicos. | Excesso de classes de exceção pode poluir o código. |
Mensagens de erro mais direcionadas ao domínio. | Nem sempre é necessário criar exceções para cada caso. |
Facilita o debug e a manutenção do sistema. | Pode levar a complexidade extra se mal planejado. |
Em resumo, o uso correto de exceções💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. personalizadas deixa o seu sistema mais expressivo e seguro
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real., mas crie apenas se fizer sentido real no contexto do seu projeto
🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes..
Hierarquia de Exceções: Organizando o Caos🔗
Uma boa prática é organizar suas exceções💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. em hierarquias. Isso facilita a captura seletiva de erros e a organização do código. Por exemplo:
Benefícios:
- Captura hierárquica:
catch (ExcecaoNegocio)
- Organização por camadas
- Filtragem
🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. em logs
Integração com APIs REST🔗
Ao trabalhar com APIs REST, você pode criar um middleware🔒 Middleware: Intercepte Requests como um Vigilante!Descubra como usar middlewares no ASP.NET Core para monitorar, validar e controlar o fluxo de requisições de forma segura e eficiente em seu projeto. personalizado para tratar suas exceções e retornar respostas consistentes:
// Middleware personalizado
public class CustomExceptionMiddleware
{
public async Task InvokeAsync(HttpContext context)
{
try
{
await _next(context);
}
catch (ExcecaoNegocio ex)
{
context.Response.StatusCode = 400;
await context.Response.WriteAsJsonAsync(new
{
ex.Message,
ex.CodigoErro,
Detalhes = ex.StackTrace // Em desenvolvimento
});
}
}
}
{
"Message": "Pagamento recusado: saldo insuficiente",
"CodigoErro": "PAGAMENTO_001",
"Detalhes": "..."
}
Conclusão🔗
Exceções customizadas💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. são como bilhetes escritos à mão para avisar que algo deu errado de uma forma que só o seu negócio entende. Com elas, você ganha clareza no código e facilita a correção de bugs - tudo isso falando a língua da sua aplicação. Use essa abordagem sempre que uma exceção pré-existente não for suficiente para expressar corretamente o problema, mas fique de olho para não sair criando exceções
💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. desnecessárias. A ideia é manter o fluxo de erros claro, produtivo e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. focado em resolver os desafios do seu sistema. Boa criação de exceções
💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. e até a próxima!
🛠 Casos de Uso Reais🔗
1. Integrações externas:
throw new IntegracaoPagamentoException("API PagSeguro offline", codigo: 503);
2. Regras de negócio complexas:
if (idade < 18 && valor > 1000)
throw new LimiteMenorIdadeException(idade, valor);
logger.LogError(ex, "Erro ao processar pedido {PedidoId}", ex.PedidoId);
Dominar exceções customizadas💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. é como ter um sistema de diagnóstico médico especializado para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! sua aplicação. Cada erro conta uma história rica em detalhes, acelerando a solução de problemas e melhorando a comunicação entre devs e stakeholders. 🩺💻
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- .NET Documentation: learn.microsoft.com/pt-br/dotnet/
- Awesome .NET: github.com/quozd/awesome-dotnet
- C# Language Specification: learn.microsoft.com/pt-br/dotnet/csharp/language-reference/language-specification/
- GitHub: Microsoft/.NET: github.com/dotnet
- Microsoft Learn: C# e .NET: learn.microsoft.com/pt-br/dotnet/csharp/