O documento discute princípios de clean code em C#, incluindo nomes significativos, métodos simples, baixo acoplamento entre classes e redução de duplicação de código. O Visual Studio fornece ferramentas como Code Metrics para medir a qualidade do código e identificar áreas que precisam de refatoração.
2. Sobre o C#
• Microsoft – 2001.
• Criada como parte da plataforma .NET
• Baseada em C, C++, Java
• Indice Tiobe: 4º lugar
3. Características do C#
• Interpretada: código é executado por um
interpretador, que em seguida é executado
pelo sistema operacional ou processador.
• Fortemente tipada: todas as variáveis tem um
tipo específico e seus tipos são importantes
para a linguagem.
4. Características do C#
• Simplicidade: linguagem tão poderosa quanto
o C++ e tão simples quanto o Visual Basic.
• Completamente orientada a objetos: em C#,
qualquer variável tem de fazer parte de uma
classe.
5. Características do C#
• Tudo é um objeto: System.Object é a classe
base de todo o sistema de tipos de C#.
• Controle de versões: cada assembly gerado,
seja como EXE ou DLL, tem informação sobre a
versão do código, permitindo a coexistência
de dois assemblies homônimos, mas de
versões diferentes no mesmo ambiente.
6. Sobre o Clean Code
• Marco inicial: “Clean Code: A Handbook of
Agile Software Craftmanship”, Robert C.
Martin.
7.
8. Sobre o Clean Code
• Eficiente (YAGNI – You ain’t gonna need it)
• Simples (KISS – Keep it simple, stupid!)
• Direto
• Sem redundâncias (DRY – Don’t repeat
yourself)
• Fácil de ler, entender e manter
• Objetivo: evitar Code Smells (indícios de erros
no Código-Fonte)
10. Teoria das Janelas Quebradas
• James Wilson e George Kelling, 1982.
• Onde algo está desorganizado, há a tendência
de que aquilo se torne cada vez mais
desorganizado com o tempo.
17. Nomes significativos
• Fácil entendimento do que é uma variável, um
método, uma classe.
• Ajuda na manutenção de sistemas - escala.
• Nomes que revelem a intenção.
20. Nomes de classes e métodos
• Classes: substantivos começando com letra
maiúscula. Ex.: Aluno, Faculdade.
• Métodos: verbos/frases curtas começando
com letra maiúscula. Ex.: EfetuarDivisao,
CadastrarAluno, Buscar.
25. Métodos
• Como saber se um método faz somente uma
coisa?
– Verifique se é possível extrair outro método que
não seja uma reafirmação da implementação
inicial.
26. Refactoring
• Reorganização do código, de modo que
melhore a estrutura interna, sem modificar
seu comportamento externo.
40. Nome do tipo na variável
• Não fazer! Nome do tipo na variável pode ser um
problema principalmente se, por uma alteração
no sistema, o tipo de resultado esperado muda.
44. Comentários
• São recomendados:
– Sobre licença de uma lib.
– Informativos.
– Explicação – regras de negócio.
• Devem ser evitados:
– Redundantes.
– Dizem o que o código deveria dizer.
54. Oddball Solution (solução excêntrica)
• Quando um mesmo problema é resolvido de
duas maneiras diferentes no mesmo código,
sendo uma mais excêntrica que outra.
• Uma só passa a ser usada, podendo se tornar
um método a ser usado em ambas as
situações.
56. Refused Bequest (Legado Recusado)
• Acontece quando uma classe recebe métodos
da outra, mas não os implementa.
57. Lei de Demeter
• Karl Lieberherr e Ian Holland, 1987, Boston
University.
• Diminui o acoplamento de classes
• Melhora a manutenibilidade do código
58. Princípios da Lei de Demeter
• Um método A de um objeto O somente
poderia acessar métodos de outros objetos
segundo as seguintes regras:
– Seja um parâmetro de A;
– Seja um objeto que A criou;
– Seja um método do próprio objeto O;
– Seja um objeto diretamente relacionado com o
objeto O;
– Seja uma variável global acessível ao objeto O;
59. Lei de Demeter – exemplo do cachorro
• Quando você precisa que um cachorro ande,
você dá a ordem para as pernas diretamente,
ou para o cachorro? Obviamente que para o
cachorro e este sabe o que precisa ser
acionado para andar.
68. O que faz um código ser limpo?
• Lógica direta (evita encobrimento de bugs)
• Dependências mínimas
• Tratamentos de erro
• Métodos celulares
• Nomes significativos
• Sem duplicações
69. CALMA, O VISUAL STUDIO TE
AJUDA.
Como saber por meio de métricas se eu preciso refatorar meu código?
70. Visual Studio – Code Metrics
• Ferramenta nativa de diagnóstico,
define métricas para análise de código.
• Analyze > Calculate Code Metrics.
• Pode analisar solução ou projeto.
72. Cyclomatic Complexity
• Vai de 1 a >51.
• Se a complexidade ciclomática é baixa, logo
existem menos caminhos para testar (menos if's
desviando o caminho, por exemplo) e, por isso,
um número baixo para a complexidade
ciclomática NÃO faz os testes serem mais
complexos. Complexidade ciclomática baixa leva
a uma maior facilidade para testar. Se muito alta
a cobertura do teste será insuficiente.
73. Depth of Inheritance
• Nível de herança – árvore.
• Toda classe começa do 1 – herda do System.
• Quanto mais próximo do 1, melhor. Quanto
mais próximo do System, mais fácil prever
comportamentos.
74. Depth of Inheritance
• Porém, isso é relativo. Um baixo número de
heranças pode significar pouco
reaproveitamento de código.