Clean Code em C#: princípios e exemplos para desenvolvedores .NET

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

Clean Code em C#: princípios e exemplos na prática



Código limpo (Clean Code) não é apenas um termo da moda, mas uma habilidade fundamental para o desenvolvedor profissional. No ecossistema .NET e C#, onde os projetos frequentemente duram anos e são mantidos por dezenas de programadores, a capacidade de escrever código compreensível e facilmente modificável torna-se criticamente importante. Neste artigo, vamos analisar os principais princípios do Clean Code aplicados ao C# e examinar exemplos concretos de sua aplicação.



Por que o código limpo é importante em C#?

C# é uma linguagem fortemente tipada, orientada a objetos e com um ecossistema rico. No entanto, seu poder pode se transformar em caos se não houver disciplina. O código limpo reduz o número de bugs, acelera a integração de novos desenvolvedores e diminui o custo de manutenção. Como disse Robert Martin: "A única maneira de escrever código rápido é escrevê-lo bem".



Princípio 1: Nomes significativos

Os nomes de variáveis, métodos e classes devem revelar a intenção. Não economize caracteres — código ruim exige mais tempo para ser compreendido.



Exemplo ruim

int d; // tempo desde a alteraçãoList<int> lst = new List<int>();void Proc(int a, int b) { ... }


Exemplo bom (Clean Code)

int elapsedTimeInDays;List<int> customerIds = new List<int>();void CalculateDiscount(decimal basePrice, decimal taxRate) { ... }


Regra: Se um nome precisa de comentário, significa que ele é ruim. Use camelCase para variáveis e PascalCase para métodos e classes.



Princípio 2: Funções pequenas (SRP no nível de métodos)

Cada função deve fazer exatamente uma coisa e fazê-la bem. Se um método contém mais de 20-30 linhas ou tem mais de dois níveis de aninhamento — é um sinal para refatoração.



Exemplo ruim: função canivete suíço

public void ProcessOrder(Order order){    // Validação    if (order == null || order.Items.Count == 0)        throw new ArgumentException("Invalid order");

// Cálculo de desconto decimal discount = 0; if (order.Total > 1000) discount = 0.1m; else if (order.Total > 500) discount = 0.05m;

// Salvamento no BD using var db = new AppDbContext(); db.Orders.Add(order); db.SaveChanges();

// Envio de email SendEmail(order.CustomerEmail, "Order received");}


Exemplo bom: separação de responsabilidades

public void ProcessOrder(Order order){    Validate(order);    var discount = CalculateDiscount(order.Total);    ApplyDiscount(order, discount);    SaveOrder(order);    SendConfirmationEmail(order);}

private void Validate(Order order){ if (order == null || order.Items.Count == 0) throw new ArgumentException("Invalid order");}

private decimal CalculateDiscount(decimal total){ if (total > 1000) return 0.1m; if (total > 500) return 0.05m; return 0;}

private void SaveOrder(Order order){ using var db = new AppDbContext(); db.Orders.Add(order); db.SaveChanges();}


Princípio 3: Evite duplicação (DRY)

Código repetido é a raiz de todos os males. Se você copia um bloco de código mais de uma vez, extraia-o para um método ou classe.



Exemplo: lógica duplicada

// No controller de usuáriosif (user.Role == "Admin" || user.Role == "Manager")    GrantAccess();

// No controller de relatóriosif (user.Role == "Admin" || user.Role == "Manager") ShowReport();


Refatoração: encapsulamento da verificação

public static class UserExtensions{    public static bool HasElevatedPermissions(this User user)    {        return user.Role == "Admin" || user.Role == "Manager";    }}

// Usoif (user.HasElevatedPermissions()) GrantAccess();


Princípio 4: Comentários são maus (exceto e

Blogs

Book Recommendations