SlideShare a Scribd company logo
1 of 78
Clean Code em C#
Gustavo Araujo
@ogustavoaraujo
Sobre o C#
• Microsoft – 2001.
• Criada como parte da plataforma .NET
• Baseada em C, C++, Java
• Indice Tiobe: 4º lugar
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.
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.
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.
Sobre o Clean Code
• Marco inicial: “Clean Code: A Handbook of
Agile Software Craftmanship”, Robert C.
Martin.
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)
Regra do Escoteiro
• Deixe o lugar mais limpo do que estava
quando você chegou.
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.
Consequências
• Menor ocorrência de bugs
• Mais fácil de editar
• Mais rápido de carregar
• Economia de tempo/dinheiro
Princípios
Nomes significativos
“Td v a p qd a al n é pq”
Nomes significativos
“Tudo vale a pena quando
a alma não é pequena”
Nomes significativos
• Funciona? Funciona.
• É o melhor? Não necessariamente.
Nomes significativos
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.
Nomes significativos
• Nomes pronunciáveis.
Nomes significativos
• Evitar nomes muito parecidos.
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.
Nomes de classes e métodos
• Na hora de chamar...
Nomes de classes e métodos
• Na hora de chamar...
UM MÉTODO SÓ DEVE CUMPRIR
UMA FUNÇÃO.
Juro que não quero ser redundante ao dizer isso, mas...
Métodos
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.
Refactoring
• Reorganização do código, de modo que
melhore a estrutura interna, sem modificar
seu comportamento externo.
Métodos (refactoring)
Métodos (refactoring)
Nomes inconsistentes de métodos
• Relação entre nomes de classes, de modo que
haja coesão de idioma e de significado.
Parâmetros
• Evitar parâmetros que possam ser extraídos
dentro do método.
• Muitos parâmetros atrapalham na reutilização
do código.
Parâmetros
Indentação
Indentação
Ordem dos métodos
• Execução: de cima para baixo.
• Método principal primeiro.
• Lembrar disso quando criar métodos privados
– refatorações.
Ordem dos métodos
Ordem dos métodos
Condicionais
• Evitar condicionais longos.
Variáveis
• Evitar muitas variáveis.
• Variáveis booleanas, no geral, não são boas.
Variáveis
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.
Comentários
• Comentários não limpam um código sujo.
Comentários
• Uso de summary
Comentários
• Uso de summary
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.
Exceções
• Usar mensagens de erro.
Exceções
Regiões
• Recomendadas para guardar métodos.
Regiões
• Não-recomendadas para esconder comandos
dentro dos métodos.
Código morto
• Código que não está sendo utilizado pelo
programa. Deve ser eliminado.
God object (classe extensa)
• Quando uma classe contém muitos métodos,
ela pode ser refatorada em outras classes.
Métodos e classes preguiçosos
• Métodos e classes que fazem pouca coisa.
Exposição Indecente
• Acontece quando usa-se o nível de permissão
indevido para um método.
Exposição Indecente
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.
Oddball Solution
Refused Bequest (Legado Recusado)
• Acontece quando uma classe recebe métodos
da outra, mas não os implementa.
Lei de Demeter
• Karl Lieberherr e Ian Holland, 1987, Boston
University.
• Diminui o acoplamento de classes
• Melhora a manutenibilidade do código
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;
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.
Exemplo da Lei de Demeter
Exemplo da Lei de Demeter
Essa não é a maneira apropriada, de acordo com a Lei de Demeter, por buscar
o valor de um objeto dentro de outro.
Exemplo da Lei de Demeter
DRY (Don’t Repeat Yourself)
DRY (Don’t Repeat Yourself)
Clean Code para Testers
• Três coisas são importantes para manter um
teste limpo:
– Legibilidade
– Legibilidade
– Legibilidade
Clean Code para Testers
• Variáveis hard-coded: cujo valor está fixo
dentro do código.
Clean Code para Testers
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
CALMA, O VISUAL STUDIO TE
AJUDA.
Como saber por meio de métricas se eu preciso refatorar meu código?
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.
Maintainability Index
• Índice de 0 a 100.
• Determina o grau de facilidade de
manutenção do código.
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.
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.
Depth of Inheritance
• Porém, isso é relativo. Um baixo número de
heranças pode significar pouco
reaproveitamento de código.
Class Coupling
• Acoplamento entre classes. Quanto menor,
melhor.
• Dependência de funcionamento.
Lines of Code
• Quantidade de linhas de código por
classe/solução. Quanto menor a quantidade,
mais fácil de testar e menos complexo é um
código.
Plugins – Visual Studio
• StyleCop - https://stylecop.codeplex.com/
• Resharper - https://www.jetbrains.com/resharper/
• CodeMaid - http://www.codemaid.net/
Obrigado!
- E-mail: gustavobr1989@gmail.com
- GitHub: @gustavoaraujo
- Linkedin e Facebook: @ogustavoaraujo

More Related Content

What's hot

Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e GitIgor Steinmacher
 
How to find what is making your Oracle database slow
How to find what is making your Oracle database slowHow to find what is making your Oracle database slow
How to find what is making your Oracle database slowSolarWinds
 
Ferramenta de apoio a gerência de configuração de software
Ferramenta de apoio a gerência de configuração de softwareFerramenta de apoio a gerência de configuração de software
Ferramenta de apoio a gerência de configuração de softwareelliando dias
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해Terry Cho
 
Upgrade EBS DB from 11g to 12c.
Upgrade EBS DB from 11g to 12c.Upgrade EBS DB from 11g to 12c.
Upgrade EBS DB from 11g to 12c.Osama Mustafa
 
Aula 01 - Revisão Algoritmo 1
Aula 01  - Revisão Algoritmo 1Aula 01  - Revisão Algoritmo 1
Aula 01 - Revisão Algoritmo 1Eder Samaniego
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...Tchelinux
 
How to set up orchestrator to manage thousands of MySQL servers
How to set up orchestrator to manage thousands of MySQL serversHow to set up orchestrator to manage thousands of MySQL servers
How to set up orchestrator to manage thousands of MySQL serversSimon J Mudd
 
Sistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos WebSistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos WebArthur Emanuel
 
DB2 11 for z/OS Migration Planning and Early Customer Experiences
DB2 11 for z/OS Migration Planning and Early Customer ExperiencesDB2 11 for z/OS Migration Planning and Early Customer Experiences
DB2 11 for z/OS Migration Planning and Early Customer ExperiencesJohn Campbell
 
Microservices: Mais que uma arquitetura de software, uma filosofia de desenvo...
Microservices: Mais que uma arquitetura de software, uma filosofia de desenvo...Microservices: Mais que uma arquitetura de software, uma filosofia de desenvo...
Microservices: Mais que uma arquitetura de software, uma filosofia de desenvo...Emmanuel Neri
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐Terry Cho
 
Cluster de Alta disponibilidade
Cluster de Alta disponibilidadeCluster de Alta disponibilidade
Cluster de Alta disponibilidadeMarcelo Garcia
 
[Curso Java Basico] Aula 02: Instalar Java Windows 10
[Curso Java Basico] Aula 02: Instalar Java Windows 10[Curso Java Basico] Aula 02: Instalar Java Windows 10
[Curso Java Basico] Aula 02: Instalar Java Windows 10Loiane Groner
 
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane FidelixCris Fidelix
 

What's hot (20)

Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e Git
 
How to find what is making your Oracle database slow
How to find what is making your Oracle database slowHow to find what is making your Oracle database slow
How to find what is making your Oracle database slow
 
Cmmi e mps.Br
Cmmi e mps.BrCmmi e mps.Br
Cmmi e mps.Br
 
Ferramenta de apoio a gerência de configuração de software
Ferramenta de apoio a gerência de configuração de softwareFerramenta de apoio a gerência de configuração de software
Ferramenta de apoio a gerência de configuração de software
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해
 
Source control
Source controlSource control
Source control
 
Upgrade EBS DB from 11g to 12c.
Upgrade EBS DB from 11g to 12c.Upgrade EBS DB from 11g to 12c.
Upgrade EBS DB from 11g to 12c.
 
Scalable OCR with NiFi and Tesseract
Scalable OCR with NiFi and TesseractScalable OCR with NiFi and Tesseract
Scalable OCR with NiFi and Tesseract
 
Aula 01 - Revisão Algoritmo 1
Aula 01  - Revisão Algoritmo 1Aula 01  - Revisão Algoritmo 1
Aula 01 - Revisão Algoritmo 1
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
 
How to set up orchestrator to manage thousands of MySQL servers
How to set up orchestrator to manage thousands of MySQL serversHow to set up orchestrator to manage thousands of MySQL servers
How to set up orchestrator to manage thousands of MySQL servers
 
Sistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos WebSistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos Web
 
DB2 11 for z/OS Migration Planning and Early Customer Experiences
DB2 11 for z/OS Migration Planning and Early Customer ExperiencesDB2 11 for z/OS Migration Planning and Early Customer Experiences
DB2 11 for z/OS Migration Planning and Early Customer Experiences
 
Microservices: Mais que uma arquitetura de software, uma filosofia de desenvo...
Microservices: Mais que uma arquitetura de software, uma filosofia de desenvo...Microservices: Mais que uma arquitetura de software, uma filosofia de desenvo...
Microservices: Mais que uma arquitetura de software, uma filosofia de desenvo...
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐
 
Cluster de Alta disponibilidade
Cluster de Alta disponibilidadeCluster de Alta disponibilidade
Cluster de Alta disponibilidade
 
06 Requisitos
06 Requisitos06 Requisitos
06 Requisitos
 
[Curso Java Basico] Aula 02: Instalar Java Windows 10
[Curso Java Basico] Aula 02: Instalar Java Windows 10[Curso Java Basico] Aula 02: Instalar Java Windows 10
[Curso Java Basico] Aula 02: Instalar Java Windows 10
 
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
 

Viewers also liked

Lambda Expressions in C# From Beginner To Expert - Jaliya Udagedara
Lambda Expressions in C# From Beginner To Expert - Jaliya UdagedaraLambda Expressions in C# From Beginner To Expert - Jaliya Udagedara
Lambda Expressions in C# From Beginner To Expert - Jaliya UdagedaraJaliya Udagedara
 
Writing clean code in C# and .NET
Writing clean code in C# and .NETWriting clean code in C# and .NET
Writing clean code in C# and .NETDror Helper
 
Windows Phone Application Development
Windows Phone Application DevelopmentWindows Phone Application Development
Windows Phone Application DevelopmentJaliya Udagedara
 
C# coding standards, good programming principles & refactoring
C# coding standards, good programming principles & refactoringC# coding standards, good programming principles & refactoring
C# coding standards, good programming principles & refactoringEyob Lube
 

Viewers also liked (6)

Lambda Expressions in C# From Beginner To Expert - Jaliya Udagedara
Lambda Expressions in C# From Beginner To Expert - Jaliya UdagedaraLambda Expressions in C# From Beginner To Expert - Jaliya Udagedara
Lambda Expressions in C# From Beginner To Expert - Jaliya Udagedara
 
Writing clean code in C# and .NET
Writing clean code in C# and .NETWriting clean code in C# and .NET
Writing clean code in C# and .NET
 
Clean Code
Clean CodeClean Code
Clean Code
 
Windows Phone Application Development
Windows Phone Application DevelopmentWindows Phone Application Development
Windows Phone Application Development
 
C# coding standards, good programming principles & refactoring
C# coding standards, good programming principles & refactoringC# coding standards, good programming principles & refactoring
C# coding standards, good programming principles & refactoring
 
reveal.js 3.0.0
reveal.js 3.0.0reveal.js 3.0.0
reveal.js 3.0.0
 

Similar to C# Clean Code Princípios

Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código LegadoCesar Romero
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitDomingos Teruel
 
Clean code 101 do caos ao nirvana em poucos passos
Clean code 101  do caos ao nirvana em poucos passosClean code 101  do caos ao nirvana em poucos passos
Clean code 101 do caos ao nirvana em poucos passosGabrielly Gomes
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"Cesar Romero
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoPaulo Henrique da Silva
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de softwareHeider Lopes
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: ClassesInael Rodrigues
 

Similar to C# Clean Code Princípios (20)

Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Codigo limpo.pptx
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
Clean code
Clean codeClean code
Clean code
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
 
Revisão de C# 4.0
Revisão de C# 4.0Revisão de C# 4.0
Revisão de C# 4.0
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código Legado
 
Python tdc2019
Python tdc2019 Python tdc2019
Python tdc2019
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
 
Clean code 101 do caos ao nirvana em poucos passos
Clean code 101  do caos ao nirvana em poucos passosClean code 101  do caos ao nirvana em poucos passos
Clean code 101 do caos ao nirvana em poucos passos
 
Gisele
GiseleGisele
Gisele
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"
 
Clean code part 2
Clean code   part 2Clean code   part 2
Clean code part 2
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimento
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: Classes
 

C# Clean Code Princípios