Guia Definitivo: JWT no ASP.NET Core com Segurança Máxima
DTOs: Organização e Segurança na Comunicação de Dados
Nos projetos de desenvolvimento de APIs e aplicativos, é comum ter que lidar com a troca de informações entre diferentes camadas: banco de dados
Conceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Descubra os fundamentos do NoSQL e aprenda como utilizar MongoDB com C# para desenvolver aplicações .NET escaláveis e modernas até 2025., regras de negócio e a parte que expõe os dados externamente (como uma API). É aqui que os DTOs (Data Transfer Objects) entram em cena para manter cada “peça” do sistema organizada. Vamos entender melhor como utilizar DTOs para manter seu domínio limpo e ainda ter a flexibilidade necessária na hora de enviar e receber dados do “mundo externo”.
📚 Conteúdo🔗
1. 🤔 O que é um DTO
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.?
2. 🔄 DTO
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. vs Entidade de Domínio: Guerra dos mundos
3. 🛠️ Por que usar DTOs
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.? O perigo do acoplamento
4. 👩💻 Implementação Passo a Passo
🚀 Scale Out com Redis: Atenda Milhões de Conexões!Integre o Redis com SignalR no .NET e distribua mensagens entre servidores, alcançando escalabilidade e alta performance em tempo real.
5. 📦 Tipos de DTOs: 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. usar cada variação
6. ✅ 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. e Armadilhas Mortais
7. 🎮 Desafio Prático: Converta uma Entidade Complexa
8. 🔚 Conclusão
🤔 O que é um DTO?🔗
DTO (Data Transfer Object) é como uma embalagem para transportar dados entre partes do sistema. Ele existe 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! representar as informações necessárias em uma comunicação (por exemplo, entre a camada de negócios e a API) sem precisar expor diretamente as entidades mais importantes do seu domínio.
Em outras palavras, imagine que você tem um valioso objeto de cristal (seu domínio) e, para enviá-lo pelos Correios (API), você o coloca em uma caixa com acolchoado (DTO). Essa caixa protege o objeto durante o transporte e só contém o necessário para a entrega chegar de forma segura. A ideia é não expor detalhes internos de como o cristal foi feito (suas 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. mais sensíveis ou a forma específica de sua modelagem).
🔄 DTO vs Entidade de Domínio: Guerra dos mundos🔗
| Característica | Entidade de Domínio | DTO |
|---|---|---|
| Responsabilidade | Regras de negócio e lógica | Transporte de dados |
| Complexidade | Pode ter métodos e comportamentos | Apenas propriedades (anêmico) |
| Validação | Valida regras de negócio complexas | Valida formato (ex: Required) |
| Ciclo de Vida | Gerenciado pelo repositório | Morre após a transferência |
Exemplo de Conversão:
// Entidade de Domínio (camada interna)
public class Produto
{
public int Id { get; set; }
public string Nome { get; set; }
public decimal PrecoCusto { get; set; } // Não deve ser exposto!
public decimal PrecoVenda { get; set; }
}
// DTO (camada de apresentação)
public class ProdutoDTO
{
public int Id { get; set; }
public string Nome { get; set; }
public decimal PrecoVenda { get; set; }
}
🛠️ Por que usar DTOs? O perigo do acoplamento🔗
1. Proteção
🛡️ 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. do Domínio: Você evita que o mundo externo manipule ou conheça detalhes internos das suas classes
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. de negócio.
2. Formatação de Dados: Pode mudar a forma como apresenta as informações sem afetar seu core
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.. Quer entregar nomes completos ou campos pré-calculados? O DTO resolve.
3. Validações
Como Assegurar Validação e Cobertura de Código em Projetos LINQAprenda estratégias avançadas para testar consultas LINQ, garantindo cobertura de código e confiabilidade com ferramentas e práticas recomendadas. Simplificadas: Nem sempre as validações do domínio são as mesmas que você vai aplicar na entrada de dados via API. O DTO pode ter validações
Como Assegurar Validação e Cobertura de Código em Projetos LINQAprenda estratégias avançadas para testar consultas LINQ, garantindo cobertura de código e confiabilidade com ferramentas e práticas recomendadas. mais específicas para primeira triagem.
4. Separação de Preocupações: Deixa claro que a parte fundamental (o domínio) e a parte de transporte de dados são coisas diferentes, facilitando manutenção 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. refatorações futuras.
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. Real: Sua entidade de domínio tem 50 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., mas o cliente mobile precisa de apenas 3. Se você retornar a entidade diretamente:
- 📉 Performance
🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos!: Dados desnecessários trafegando - 🔓 Segurança
🛡️ 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.: Expõe campos sensíveis sem querer - 💥 Fragilidade: Mudanças no domínio quebram clientes
Exemplo de Acoplamento Perigoso:
// Entidade de Domínio (nunca deve ser exposta diretamente!)
public class Usuario
{
public int Id { get; set; }
public string Senha { get; set; } // 😱
public List<Permissao> Permissoes { get; set; }
}
// Controller sem DTO (ANTI-PATTERN!)
[HttpGet("{id}")]
public Usuario GetUsuario(int id) => _repo.GetUsuario(id);
// Retorna TUDO, incluindo a senha!
👩💻 Implementação Passo a Passo🔗
Passo 1: 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. DTOs Específicos
public class PedidoDTO
{
public int ClienteId { get; set; }
public List<ItemPedidoDTO> Itens { get; set; }
}
public class ItemPedidoDTO
{
public int ProdutoId { get; set; }
public int Quantidade { get; set; }
}
Passo 2: Mapeamento Manual (Simples)
public PedidoDTO ConvertParaDTO(Pedido pedido)
{
return new PedidoDTO
{
ClienteId = pedido.Cliente.Id,
Itens = pedido.Itens.Select(item => new ItemPedidoDTO
{
ProdutoId = item.Produto.Id,
Quantidade = item.Quantidade
}).ToList()
};
}
Passo 3: Mapeamento com AutoMapper
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. (Avançado)
// Configuração do perfil
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<Pedido, PedidoDTO>();
CreateMap<ItemPedido, ItemPedidoDTO>();
}
}
// Uso no controller
var pedidoDTO = _mapper.Map<PedidoDTO>(pedido);
📦 Tipos de DTOs: Quando usar cada variação🔗
- Exemplo:
ClienteDetailsDTO(todos os dados 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! tela de detalhes) - Otimiza queries (ex: Include() no EF Core
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.)
2. DTO de Escrita (POST
📡 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./PUT):
public class ClienteCreateDTO
{
[Required, StringLength(100)]
public string Nome { get; set; }
[EmailAddress]
public string Email { get; set; }
}
- Agrega dados de múltiplas fontes
- Exemplo:
DashboardDTOcom total de vendas + métricas
📊 Monitoramento com Prometheus: Métricas em Tempo Real!Descubra como implementar o Prometheus para monitoramento em sistemas .NET, com métricas em tempo real e dashboards inteligentes.
✅ Boas Práticas e Armadilhas Mortais🔗
✅ Faça:
- Use
recordpara DTOs imutáveis
📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance. (C# 9+):
public record ClienteDTO(int Id, string Nome, string Email);
- Valide DTOs com DataAnnotations ou FluentValidation
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. - Namespaces
🖌️ XAML Básico: Crie Interfaces sem Código C# (Quase)!Descubra como usar XAML para criar interfaces atrativas em aplicações .NET. Aprenda conceitos e dicas práticas para iniciar seu projeto. claros: 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..Api.DTOs
❌ Não Faça:
- Herdar DTOs
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. de entidades - Adicionar
📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. lógica de negócio em DTOs - Criar DTOs genéricos
Uso de generics e reflection com AOT: Dicas e truquesDescubra como otimizar performance e segurança ao utilizar generics e reflection em aplicações .NET Native AOT, evitando erros em tempo de execução. demais ("God DTO")
Performance
🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos! Tip: 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! grandes volumes, considere:
ref structDTOs (cenários
🧠 Memory Management Avançado: Domine Span<T> e MemoryMarshal!Transforme seu código C# usando Span<T> e MemoryMarshal para manipulação eficiente de memória, reduzindo alocações desnecessárias e elevando a performance.
📊 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. críticos)- Serialização otimizada (ex: System.Text.Json
⚡ System.Text.Json 2.0: Serialização com Source Generators!Descubra como os Source Generators do .NET 8 revolucionam a serialização JSON, proporcionando performance 5x mais rápida e menor uso de memória.)
🎮 Desafio Prático: Converta uma Entidade Complexa🔗
Entidade:
public class Voo
{
public int Id { get; set; }
public string NumeroVoo { get; set; }
public Aeronave Aeronave { get; set; }
public List<Passageiro> Passageiros { get; set; }
public decimal CustoOperacional { get; set; }
}
1. Crie um VooDTO que exponha apenas:
- Número do voo
- Modelo
🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto. da aeronave - Total de passageiros
- Horário previsto (novo campo!)
2. Implemente o mapeamento manual e com AutoMapper
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.
Dica de Ouro: Use projeções no EF Core
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. para evitar SELECT N+1!
var vooDTO = await _context.Voos
.Where(v => v.Id == id)
.Select(v => new VooDTO
{
NumeroVoo = v.NumeroVoo,
ModeloAeronave = v.Aeronave.Modelo,
TotalPassageiros = v.Passageiros.Count,
HorarioPrevisto = v.HorarioPartida.ToString("dd/MM/yyyy HH:mm")
}).FirstOrDefaultAsync();
🔚 Conclusão🔗
DTOs existem para facilitar a comunicação de dados sem “sujar” o coração do seu projeto, que é o domínio. Eles são uma camada de proteção e flexibilidade, permitindo que suas entidades internas fiquem mais robustas e focadas, enquanto
🔄 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! o mundo externo recebe e envia apenas o mínimo necessário. Dessa forma, você evita dependências desnecessárias, deixa o código mais limpo e garante a manutenibilidade a longo prazo.
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/
- ASP.NET Core Samples: github.com/dotnet/AspNetCore.Docs
- Awesome .NET: github.com/quozd/awesome-dotnet
- GitHub: Microsoft/.NET: github.com/dotnet
- Microsoft Learn: C# e .NET: learn.microsoft.com/pt-br/dotnet/csharp/
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 9 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás