Code review em C#: o que verificar e como dar feedback

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Code review em C#: o que verificar e como dar feedback



Code review não é apenas uma formalidade, mas um dos processos-chave que garantem a qualidade do código. Isso é especialmente importante para projetos em C# e .NET, onde alta performance, legibilidade e conformidade com padrões modernos desempenham um papel crucial. Neste artigo, vamos analisar o que observar ao revisar código C# e como dar feedback para que seja útil e construtivo.



1. Arquitetura e conformidade com princípios SOLID

Antes de olhar para linhas específicas de código, avalie a arquitetura geral. Em C#, isso é especialmente importante devido ao uso extensivo de OOP.

  • Single Responsibility: cada classe e método deve resolver uma única tarefa. Se um método faz demais — é motivo para revisão.
  • Open/Closed: verifique se é possível estender a funcionalidade sem alterar o código existente (por exemplo, através de interfaces ou classes abstratas).
  • Dependency Injection: em .NET Core/5+ DI é padrão. Certifique-se de que as dependências são passadas através do construtor, e não criadas dentro da classe.


// Ruim: violação de SRP e DIpublic class OrderService{    private readonly SqlConnection _connection = new SqlConnection("...");        public void ProcessOrder(Order order)    {        // Lógica de validação        // Lógica de salvamento no BD        // Lógica de envio de email    }}

// Bom: separação em serviços e DIpublic class OrderService{ private readonly IOrderRepository _orderRepository; private readonly IEmailService _emailService;

public OrderService(IOrderRepository orderRepository, IEmailService emailService) { _orderRepository = orderRepository; _emailService = emailService; }

public void ProcessOrder(Order order) { _orderRepository.Save(order); _emailService.SendConfirmation(order); }}


2. Segurança e tratamento de erros

Segurança é uma parte crítica de qualquer aplicação em C#. Preste atenção aos seguintes aspectos:

  • SQL Injection: use consultas parametrizadas ou Entity Framework, em vez de concatenação de strings.
  • Exceções: não engula exceções com catch vazios. Registre erros e use finally para liberar recursos.
  • Null-safety: em C# 8+, use nullable reference types. Verifique argumentos de métodos para null.


// Ruim: vulnerabilidade a SQL Injectionvar query = "SELECT * FROM Users WHERE Name = '" + userName + "'";

// Bom: consulta parametrizadavar command = new SqlCommand("SELECT * FROM Users WHERE Name = @name", connection);command.Parameters.AddWithValue("@name", userName);


Também verifique se a aplicação trata corretamente as exceções nos limites do sistema (por exemplo, em controllers ASP.NET Core).



3. Performance e gerenciamento de memória

C# é uma linguagem com gerenciamento automático de memória, mas isso não significa que se possa esquecer da performance. Ao revisar, observe:

  • Consultas LINQ: evite múltiplas iterações em coleções. Por exemplo, .ToList() após cada .Where() pode desacelerar seriamente o funcionamento.
  • Assincronicidade: use async/await para operações de I/O, mas não abuse de .Result ou .Wait() — isso pode causar deadlock.
  • Object pool: para objetos pesados (por exemplo, conexões com BD), use pooling em vez de criá-los toda vez.


// Ruim: múltiplas iteraçõesvar filtered = items.Where(x => x.IsActive).ToList();var sorted = filtered.OrderBy(x => x.Name).ToList

Blogs

Book Recommendations