Clean Code em C#: princípios e exemplos na prática
\nCódigo limpo (Clean Code) não é apenas uma tendência moderna no desenvolvimento, mas uma abordagem fundamental que determina o sucesso de qualquer projeto de software em C#. Escrever código que seja fácil de ler, manter e expandir é uma habilidade que diferencia o profissional do iniciante. Neste artigo, vamos analisar os princípios-chave do Clean Code com exemplos práticos para desenvolvedores .NET.
\n\nPor que o Clean Code é importante para projetos C#
\nNo ecossistema .NET, onde os projetos frequentemente duram anos e passam de uma equipe para outra, a legibilidade do código torna-se um fator crítico. O código limpo permite:
\n- \n
- Reduzir o tempo de depuração e refatoração \n
- Diminuir a quantidade de bugs devido a uma lógica clara \n
- Melhorar o trabalho em equipe e as revisões de código \n
- Aumentar a produtividade do desenvolvimento a longo prazo \n
Princípio 1: Nomes significativos e estilo consistente
\nO primeiro passo para um código limpo é a nomeação correta. Os nomes de variáveis, métodos e classes devem refletir sua finalidade, e não a forma de implementação.
\n\nExemplo ruim
\npublic class Data\n{\n public int a { get; set; }\n public string b { get; set; }\n public void Do()\n {\n // alguma lógica\n }\n}\n\nExemplo bom
\npublic class Customer\n{\n public int Id { get; set; }\n public string FullName { get; set; }\n public void SendWelcomeEmail()\n {\n // lógica de envio de e-mail de boas-vindas\n }\n}\nUse camelCase para variáveis locais, PascalCase para classes e métodos. Evite abreviações, a menos que sejam amplamente aceitas (por exemplo, Id em vez de Identifier).
Princípio 2: Métodos pequenos com uma única responsabilidade
\nCada método deve executar exatamente uma tarefa. Isso torna o código testável e reutilizável. Se um método tiver mais de 15-20 linhas, é hora de dividi-lo.
\n\nExemplo ruim
\npublic void ProcessOrder(Order order)\n{\n // Validação\n if (order.Total <= 0) throw new Exception("Invalid order");\n // Salvar no BD\n _context.Orders.Add(order);\n _context.SaveChanges();\n // Enviar e-mail\n var emailService = new EmailService();\n emailService.Send(order.CustomerEmail, "Order confirmed");\n}\n\nExemplo bom
\npublic void ProcessOrder(Order order)\n{\n ValidateOrder(order);\n SaveOrder(order);\n SendConfirmationEmail(order);\n}\n\nprivate void ValidateOrder(Order order)\n{\n if (order.Total <= 0)\n throw new ArgumentException("Order total must be positive");\n}\n\nprivate void SaveOrder(Order order)\n{\n _context.Orders.Add(order);\n _context.SaveChanges();\n}\n\nprivate void SendConfirmationEmail(Order order)\n{\n var emailService = new EmailService();\n emailService.Send(order.CustomerEmail, "Order confirmed");\n}\nEssa abordagem permite substituir a lógica facilmente, escrever testes unitários para cada etapa e encontrar erros rapidamente.
\n\nPrincípio 3: Evite números e strings mágicos
\nNúmeros e strings mágicos são uma das principais causas de código difícil de ler. Coloque-os em constantes ou arquivos de configuração.
\n\nExemplo ruim
\nif (user.Role == 3)\n{\n // lógica para administrador\n}\nif (DateTime.Now.Hour > 18)\n{\n // desconto noturno\n}\n\nExemplo bom
\nprivate const int AdminRoleId = 3;\nprivate const int EveningDiscountStartHour = 18;\n\nif (user.RoleId == AdminRoleId)\n{\n // lógica para administrador\n}\nif (DateTime.Now.Hour > EveningDiscountStartHour)\n{\n // desconto noturno\n}\nPara cenários mais complexos, use enumerações (enum) e classes de configuração.
Princípio 4: Princípio DRY (Don't Repeat Yourself)
\nDuplicação de código é