Code review en C#: qué revisar y cómo dar retroalimentación

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Code review en C#: qué revisar y cómo dar retroalimentación



Code review no es solo una formalidad, sino uno de los procesos clave que garantizan la calidad del código. Esto es especialmente importante en proyectos de C# y .NET, donde el alto rendimiento, la legibilidad y el cumplimiento de estándares modernos juegan un papel crucial. En este artículo analizaremos qué aspectos revisar al hacer code review de código C# y cómo dar retroalimentación útil y constructiva.



1. Arquitectura y cumplimiento de principios SOLID

Antes de revisar líneas de código específicas, evalúa la arquitectura general. En C# esto es especialmente importante debido al uso extensivo de POO.

  • Single Responsibility: cada clase y método debe resolver una sola tarea. Si un método hace demasiado, es motivo de revisión.
  • Open/Closed: verifica si se puede ampliar la funcionalidad sin modificar el código existente (por ejemplo, mediante interfaces o clases abstractas).
  • Dependency Injection: en .NET Core/5+ DI es el estándar. Asegúrate de que las dependencias se pasen a través del constructor, no se creen dentro de la clase.


// Mal: violación de SRP y DIpublic class OrderService{    private readonly SqlConnection _connection = new SqlConnection("...");        public void ProcessOrder(Order order)    {        // Lógica de validación        // Lógica de guardado en BD        // Lógica de envío de email    }}

// Bien: separación en servicios y 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. Seguridad y manejo de errores

La seguridad es una parte crítica de cualquier aplicación en C#. Presta atención a los siguientes aspectos:

  • Inyección SQL: usa consultas parametrizadas o Entity Framework, no concatenación de cadenas.
  • Excepciones: no tragues excepciones con catch vacíos. Registra los errores y usa finally para liberar recursos.
  • Null-safety: en C# 8+ usa nullable reference types. Verifica que los argumentos de métodos no sean null.


// Mal: vulnerable a inyección SQLvar query = "SELECT * FROM Users WHERE Name = '" + userName + "'";

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


También verifica que la aplicación maneje correctamente las excepciones en los límites del sistema (por ejemplo, en controladores ASP.NET Core).



3. Rendimiento y gestión de memoria

C# es un lenguaje con gestión automática de memoria, pero eso no significa que puedas olvidarte del rendimiento. Al hacer code review, presta atención a:

  • Consultas LINQ: evita múltiples iteraciones sobre colecciones. Por ejemplo, .ToList() después de cada .Where() puede ralentizar seriamente el rendimiento.
  • Asincronía: usa async/await para operaciones de I/O, pero no abuses de .Result o .Wait() — esto puede causar deadlocks.
  • Pool de objetos: para objetos pesados (como conexiones a BD) usa pooling, no los crees cada vez.


// Mal: múltiples iteracionesvar filtered = items.Where(x => x.IsActive).ToList();var sorted = filtered.OrderBy(x => x.Name).ToList

Blogs

Book Recommendations