SlideShare a Scribd company logo
1 of 54
Como fazer um
bom design de
código em Java
Paula Santana
Paula
Nas paradas da tecnologia desde 2008
Pagando os boletos com Java desde 2014
Organizadora do Devs JavaGirl e SouJava
Microsoft MVP
Analista de Sofware Sênior na Invillia.
JAVA 25 ANOS
O que eu diria para o
meu eu junior?
Doze fatores da Paulinha
O porquê do
design.
Effective Java
nos métodos
Boas práticas
Para Orientação
a Objetos
Divisão de
camadas
JAVA 25 ANOS
Estrutura de
pacotes
Over engineeringExceções Qualidade em
Testes
Pair Programing Code Review E Pull
Request
Documentação e
Configuração
Code Style e
Ferramentas de
anaĺise estática
JAVA 25 ANOS
O porquê do Design
1
• Modificações com:
⚬ facilidade
⚬ segurança
• Evolução com:
⚬ Menor investimento
O porquê do
Design
JAVA 25 ANOS
JCP
Decisões que foram tomadas ao longo dos anos
e sobre como o uso de especificações permitiu
que não houvesse vendor lock-in com bibliotecas
e apis no ecossistema Java.
JAVA 25 ANOS
Boas práticas Para
Orientação a Objetos
2
Java == múltiplos paradigmas
JAVA 25 ANOS
Getters e Setters
Frameworks usam a api de
Reflection para executar
parse de dados, então não
é necessário que você crie
eles até mesmo para
objetos anêmicos, se não
for necessário.
ENUM
Use enums no lugar de
constantes, isso permite
deixar o código mais limpo.
Além Enum podem ser
classes bem ricas e podem
facilitar muito a
implementação de alguns
padrões de projeto.
Nomes
Não economize com o
tamanho do nome, desde
que ele descreva bem o
propósito do que está no
método, variável, classe,
etc.
JAVA 25 ANOS
Pequenas Grandes Ações
Programe
voltado a
interface
JAVA 25 ANOS
Evite herança,
favoreça
composição Não permite mudança de
comportamento em tempo de
execução
Acoplamento forte
Alteração na superclasse
impacta nas subclasses
JAVA 25 ANOS
Encapsulamento fraco
Herança
Composição
Permite definir comportamentos
complexos.
Comportamentos diferentes em
runtime.
Melhor encapsulamento.
Voluntário é uma Pessoa
Herança
Projeto tem um Responsável
Composição
Favoreça imutabilidade
e simplicidade
JAVA 25 ANOS
forma =
forma =
forma é mutável
1
Ela deve ser final
para evitar que
filhas permitam
mutabilidade.
Os atributos devem
ser privados.
2 3Os atributos devem
ser final.
Classe
imutável
Classe
mutável
4
Caso sua classe tenha composição
com objetos mutáveis, eles devem
ter acesso exclusivo pela sua
classe, devolvendo cópias
defensivas.
JAVA 25 ANOS
Effective Java nos
Métodos
3
public boolean helpToMethod(){
Faça Cópias
Defensivas quando
necessário
JAVA 25 ANOS
Verifique a validade dos
parâmetros
Utilize Sobrecarga com
critério
Projete assinatura de
métodos com cuidado
Retorne coleções
vazias em vez de nulas
JAVA 25 ANOS
Divisão de Camadas
4
Um dos grandes problemas que
desenvolvedores enfrentam no começo de
carreira é sobre a divisão de camadas da
aplicação.Existem dois conjuntos de
padrões que são essenciais para entender
estas divisões.
Possui um conjunto de princípios que
norteiam sobre a responsabilidade das
camadas no desenvolvimento de
software.
GRASP
Conjunto de responsabilidades de
classes que criamos ao longo do
desenvolvimento do software.
Patterns of Enterprise Application
JAVA 25 ANOS
JAVA 25 ANOS
Estrutura de Pacotes
5
Simples de implementar e de
entender. Não é boa em grande
escala, a medida que o projeto
cresce pode ficar complicado de
organizar e encontrar o código, além
disso não permite uma boa coesão.
PACKAGE BY
LAYER
JAVA 25 ANOS
Permite uma alta coesão dos
recursos e visão das
funcionalidades do sistema.
Porém sua desvantagem é sua
curva de aprendizagem, já que para
este modelo é necessário bom
conhecimento do negócio.
Escopo amplo.
PACKAGE BY FEATURE
JAVA 25 ANOS
JAVA 25 ANOS
Exceptions
6
Verificada
s
JAVA 25 ANOS
Não
Verificada
s
JAVA 25 ANOS
JAVA 25 ANOS
Overengineering
7
O que o
desenvolvedor fez
O que o projeto
pediu
O que o usuário
queria
O que é?
Principio KISS
Keep It Simple Stupid, que
significa Mantenha de forma
estupidamente simples.
Fazer algo simples pode
demandar mais tempo do que
fazer de forma complexa.
Principio YAGNI
You aren't gonna need it, ou
seja, você não vai precisar
disso.
Este princípio afirma que uma
funcionalidade não deve ser
adicionada até que se faça
necessária.
Novas Features do Java
"Me segura que eu quero
usar ...<complete>"
disse o programador que
adora "inovar".
Cuidado no Use de Streams,
use novos recursos quando
realmente fizer sentido.
JAVA 25 ANOS
JAVA 25 ANOS
Fonte: Effective Java
Exemplo do que NÃO fazer
JAVA 25 ANOS
Qualidade em Testes
8
Quer saber se um teste vai
garantir um comportamento?
Image que haja modificação na
estrutura do seu código, em caso
que mude o comportamento seu
teste deverá quebrar, certo? Pois
então, em muitos casos os testes
continuam passando.
Passar o teste
não significa
que você tem
qualidade
JAVA 25 ANOS
BDD
TDD
Testes de Mutação
Testes de Unidade
Testes de Contrato
Testes de Integração
JAVA 25 ANOS
Testes de Componente
Testes end-to-end
Testes de Performance
{
JAVA 25 ANOS
Code Style e
Ferramentas de análise
estática
9
Code Style
PersonalizadoQualidadePadrão
JAVA 25 ANOS
Modelos mais utilizados:
Itens do
Code
Style do
Twitter
JAVA 25 ANOS
● ESTILO DE CODIFICAÇÃO
● FORMATAÇÃO
● DECLARAÇÕES DE CAMPO, CLASSE E MÉTODO
● NOMENCLATURA VARIÁVEL
● OPERADORES DE BLOCO DE ESPAÇO E IGUAIS
● IMPORTAÇÕES
● USE ANOTAÇÕES COM SABEDORIA
● USE INTERFACES
● ESCREVENDO CÓDIGO TESTÁVEL
● OBJETOS DE SUPORTE
● TESTANDO CÓDIGO MULTITHREAD
● TESTANDO ANTIPADRÕES
● EVITAR ALEATORIEDADE NOS TESTES
● MELHORES PRÁTICAS
● PROGRAMAÇÃO DEFENSIVA
● CÓDIGO LIMPO
● USE BIBLIOTECAS MAIS NOVAS / MELHORES
Ferramentas de
análise estática
JAVA 25 ANOS
Identificar e corrigir problemas rapidamente.
Facilita a implementação do Code Style
JAVA 25 ANOS
Pair Programming
10
Fonte: https://martinfowler.com/articles/on-pair-programming.html
>
Rotação dos pares
Planejamento
Presencial - Espaço fisico
Remoto - Ferramentas
O que fazer
>
Distrações
Microgestão
Impaciência
muitas horas de pareamento
O que NÃO fazer
JAVA 25 ANOS
Code Review
E
Pull Request
11
Pull
Request
JAVA 25 ANOS
Coloque uma boa descrição.
Motivo de algumas decisões
foram tomadas e abordagens
verificadas antes da tomada de
decisão.
Impacto das alterações.
Métricas de análise da modificação
ou links de referência.
Cards e tarefas relacionadas ao PR
JAVA 25 ANOS
Code
Review
Faça perguntas e comentários que agreguem.
Automatize o que for possível.
Dados e fatos técnicos substituem opiniões e preferências pessoais.
integrar ao processo existente da equipe
Melhora o nível técnico do Time.
Identificar e corrigir problemas rapidamente.
Melhora futuros planejamentos.
O que
analisar?
JAVA 25 ANOS
● O CÓDIGO ESTÁ BEM PROJETADO?
● O CÓDIGO ESTÁ MAIS COMPLEXO DO
QUE PRECISA SER?
● O CÓDIGO POSSUI TESTES
APROPRIADOS?
● OS TESTES ESTÃO BEM PROJETADOS?
● OS NOMES SÃO CLAROS?
● O CÓDIGO ESTÁ DOCUMENTADO
ADEQUADAMENTE?
● O CÓDIGO ESTÁ EM CONFORMIDADE
COM O GUIA DE ESTILOS ?
Comentários
JAVA 25 ANOS
● SEJA ATENCIOSO.
● EXPLIQUE SEU RACIOCÍNIO E USE
ORIENTAÇÕES EXPLÍCITAS, APENAS
ABORDANDO O PONTO EM QUESTÃO E
DEIXANDO O DESENVOLVEDOR
DECIDIR.
● MOTIVE OS DESENVOLVEDORES A
SIMPLIFICAR O CÓDIGO, EM VEZ DE
APENAS EXPLICAR A COMPLEXIDADE
PARA VOCÊ.
● ESPERE EXPLICAÇÕES SOBRE OS
PONTOS LEVANTADOS.
JAVA 25 ANOS
Documentação e
Configuração
12
JAVA 25 ANOS
Documentação deve ficar no projeto.
Melhor documentação é o código.
README do projeto deve descrever o que
, onde, como e porquê.
Código > Javadoc
Externalize configuração da aplicação
FONTE : GIST.GITHUB.COM/PURPLEBOOTH/109311BB0361F32D87A2
JAVA 25 ANOS
Esta tudo conectado...
@psanrosa13
github.com/psanrosa13
linkedin.com/in/paula-macedo-santana-dev/
JAVA 25 ANOS
JAVABAHIA.GITHUB.IO/COMO-FAZER-UM-BOM-DESIGN-CODIGO-EM-JAVA/

More Related Content

Similar to 12 fatores para um bom design de código em Java

Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...
Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...
Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...Felipe Nascimento
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Diego Pacheco
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasKleitor Franklint Correa Araujo
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaRafael Ponte
 
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixCris Fidelix
 
Test driven development
Test driven developmentTest driven development
Test driven developmentclauvane1708
 
Microsoft ALM = Produtividade
Microsoft ALM = ProdutividadeMicrosoft ALM = Produtividade
Microsoft ALM = ProdutividadeAdriano Bertucci
 
Agile Brazil 2018
Agile Brazil 2018Agile Brazil 2018
Agile Brazil 2018Karla Silva
 
[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018Larissa Soares
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 

Similar to 12 fatores para um bom design de código em Java (20)

Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...
Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...
Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Apresentacao Convenio
Apresentacao ConvenioApresentacao Convenio
Apresentacao Convenio
 
Palestra Testes Ágeis - SEMAC INF UFRGS
Palestra Testes Ágeis - SEMAC INF UFRGSPalestra Testes Ágeis - SEMAC INF UFRGS
Palestra Testes Ágeis - SEMAC INF UFRGS
 
Apresentacao dev ops
Apresentacao dev opsApresentacao dev ops
Apresentacao dev ops
 
APS - RAD x Ágeis
APS - RAD x ÁgeisAPS - RAD x Ágeis
APS - RAD x Ágeis
 
Metodologias Ageis
Metodologias AgeisMetodologias Ageis
Metodologias Ageis
 
38484931 questionario-es
38484931 questionario-es38484931 questionario-es
38484931 questionario-es
 
Métodos Ágeis - Aula02
Métodos Ágeis - Aula02Métodos Ágeis - Aula02
Métodos Ágeis - Aula02
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégias
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresa
 
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Microsoft ALM = Produtividade
Microsoft ALM = ProdutividadeMicrosoft ALM = Produtividade
Microsoft ALM = Produtividade
 
Agile Brazil 2018
Agile Brazil 2018Agile Brazil 2018
Agile Brazil 2018
 
[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Certificação Java
Certificação JavaCertificação Java
Certificação Java
 
Unit test & TDD
Unit test & TDDUnit test & TDD
Unit test & TDD
 

More from Paula Santana

Boas Práticas para desenvolvimento java que nunca saíram de moda
Boas Práticas para desenvolvimento java que nunca saíram de modaBoas Práticas para desenvolvimento java que nunca saíram de moda
Boas Práticas para desenvolvimento java que nunca saíram de modaPaula Santana
 
Como começar quando se esta começando?
Como começar quando se esta começando?Como começar quando se esta começando?
Como começar quando se esta começando?Paula Santana
 
Desvendando a arquitetura orientada a eventos
Desvendando a arquitetura orientada a eventosDesvendando a arquitetura orientada a eventos
Desvendando a arquitetura orientada a eventosPaula Santana
 
Como começas quando se está começando
Como começas quando se está começandoComo começas quando se está começando
Como começas quando se está começandoPaula Santana
 
Refatoracao de codigo
Refatoracao de codigoRefatoracao de codigo
Refatoracao de codigoPaula Santana
 
Desenvolvimento com arquitetura baseada em eventos
Desenvolvimento com arquitetura baseada em eventosDesenvolvimento com arquitetura baseada em eventos
Desenvolvimento com arquitetura baseada em eventosPaula Santana
 
Workshop git para iniciantes
Workshop git para iniciantesWorkshop git para iniciantes
Workshop git para iniciantesPaula Santana
 
Facilitando a implementação de mensageria em aplicações Java
Facilitando a implementação de mensageria em aplicações JavaFacilitando a implementação de mensageria em aplicações Java
Facilitando a implementação de mensageria em aplicações JavaPaula Santana
 
Como uma linguagem de programação pode empoderar uma mulher
Como uma linguagem de programação pode empoderar uma mulherComo uma linguagem de programação pode empoderar uma mulher
Como uma linguagem de programação pode empoderar uma mulherPaula Santana
 
Graphql - o que é, onde e porque usar?
Graphql - o que é, onde e porque usar?Graphql - o que é, onde e porque usar?
Graphql - o que é, onde e porque usar?Paula Santana
 
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)Paula Santana
 
Desenvolvimento de sistemas com mensageria
Desenvolvimento de sistemas com mensageriaDesenvolvimento de sistemas com mensageria
Desenvolvimento de sistemas com mensageriaPaula Santana
 
4 revolucao industrial
4 revolucao industrial4 revolucao industrial
4 revolucao industrialPaula Santana
 
Desenvolvendo sistemas gigantes na internet com arquitetura baseada
Desenvolvendo sistemas gigantes na internet com arquitetura baseadaDesenvolvendo sistemas gigantes na internet com arquitetura baseada
Desenvolvendo sistemas gigantes na internet com arquitetura baseadaPaula Santana
 
Arquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdcArquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdcPaula Santana
 
Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...
Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...
Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...Paula Santana
 
Microsserviços, moda ou necessidade?
Microsserviços, moda ou necessidade?Microsserviços, moda ou necessidade?
Microsserviços, moda ou necessidade?Paula Santana
 

More from Paula Santana (20)

Boas Práticas para desenvolvimento java que nunca saíram de moda
Boas Práticas para desenvolvimento java que nunca saíram de modaBoas Práticas para desenvolvimento java que nunca saíram de moda
Boas Práticas para desenvolvimento java que nunca saíram de moda
 
Como começar quando se esta começando?
Como começar quando se esta começando?Como começar quando se esta começando?
Como começar quando se esta começando?
 
Desvendando a arquitetura orientada a eventos
Desvendando a arquitetura orientada a eventosDesvendando a arquitetura orientada a eventos
Desvendando a arquitetura orientada a eventos
 
Como começas quando se está começando
Como começas quando se está começandoComo começas quando se está começando
Como começas quando se está começando
 
Refatoracao de codigo
Refatoracao de codigoRefatoracao de codigo
Refatoracao de codigo
 
Desenvolvimento com arquitetura baseada em eventos
Desenvolvimento com arquitetura baseada em eventosDesenvolvimento com arquitetura baseada em eventos
Desenvolvimento com arquitetura baseada em eventos
 
Workshop git para iniciantes
Workshop git para iniciantesWorkshop git para iniciantes
Workshop git para iniciantes
 
Facilitando a implementação de mensageria em aplicações Java
Facilitando a implementação de mensageria em aplicações JavaFacilitando a implementação de mensageria em aplicações Java
Facilitando a implementação de mensageria em aplicações Java
 
Como uma linguagem de programação pode empoderar uma mulher
Como uma linguagem de programação pode empoderar uma mulherComo uma linguagem de programação pode empoderar uma mulher
Como uma linguagem de programação pode empoderar uma mulher
 
Graphql - o que é, onde e porque usar?
Graphql - o que é, onde e porque usar?Graphql - o que é, onde e porque usar?
Graphql - o que é, onde e porque usar?
 
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
 
Desenvolvimento de sistemas com mensageria
Desenvolvimento de sistemas com mensageriaDesenvolvimento de sistemas com mensageria
Desenvolvimento de sistemas com mensageria
 
4 revolucao industrial
4 revolucao industrial4 revolucao industrial
4 revolucao industrial
 
Conhecendo o Jnosql
Conhecendo o JnosqlConhecendo o Jnosql
Conhecendo o Jnosql
 
Desenvolvendo sistemas gigantes na internet com arquitetura baseada
Desenvolvendo sistemas gigantes na internet com arquitetura baseadaDesenvolvendo sistemas gigantes na internet com arquitetura baseada
Desenvolvendo sistemas gigantes na internet com arquitetura baseada
 
Arquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdcArquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdc
 
Testes de contrato
Testes de contratoTestes de contrato
Testes de contrato
 
Spring Rest
Spring RestSpring Rest
Spring Rest
 
Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...
Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...
Experiências de quem utiliza a Stack da Netflix e Spring boot em serviços de ...
 
Microsserviços, moda ou necessidade?
Microsserviços, moda ou necessidade?Microsserviços, moda ou necessidade?
Microsserviços, moda ou necessidade?
 

12 fatores para um bom design de código em Java

  • 1. Como fazer um bom design de código em Java Paula Santana
  • 2. Paula Nas paradas da tecnologia desde 2008 Pagando os boletos com Java desde 2014 Organizadora do Devs JavaGirl e SouJava Microsoft MVP Analista de Sofware Sênior na Invillia. JAVA 25 ANOS
  • 3. O que eu diria para o meu eu junior?
  • 4. Doze fatores da Paulinha O porquê do design. Effective Java nos métodos Boas práticas Para Orientação a Objetos Divisão de camadas JAVA 25 ANOS Estrutura de pacotes Over engineeringExceções Qualidade em Testes Pair Programing Code Review E Pull Request Documentação e Configuração Code Style e Ferramentas de anaĺise estática
  • 5. JAVA 25 ANOS O porquê do Design 1
  • 6. • Modificações com: ⚬ facilidade ⚬ segurança • Evolução com: ⚬ Menor investimento O porquê do Design JAVA 25 ANOS
  • 7. JCP Decisões que foram tomadas ao longo dos anos e sobre como o uso de especificações permitiu que não houvesse vendor lock-in com bibliotecas e apis no ecossistema Java.
  • 8. JAVA 25 ANOS Boas práticas Para Orientação a Objetos 2
  • 9. Java == múltiplos paradigmas JAVA 25 ANOS
  • 10. Getters e Setters Frameworks usam a api de Reflection para executar parse de dados, então não é necessário que você crie eles até mesmo para objetos anêmicos, se não for necessário. ENUM Use enums no lugar de constantes, isso permite deixar o código mais limpo. Além Enum podem ser classes bem ricas e podem facilitar muito a implementação de alguns padrões de projeto. Nomes Não economize com o tamanho do nome, desde que ele descreva bem o propósito do que está no método, variável, classe, etc. JAVA 25 ANOS Pequenas Grandes Ações
  • 12. Evite herança, favoreça composição Não permite mudança de comportamento em tempo de execução Acoplamento forte Alteração na superclasse impacta nas subclasses JAVA 25 ANOS Encapsulamento fraco Herança Composição Permite definir comportamentos complexos. Comportamentos diferentes em runtime. Melhor encapsulamento.
  • 13. Voluntário é uma Pessoa Herança
  • 14. Projeto tem um Responsável Composição
  • 15. Favoreça imutabilidade e simplicidade JAVA 25 ANOS forma = forma = forma é mutável
  • 16. 1 Ela deve ser final para evitar que filhas permitam mutabilidade. Os atributos devem ser privados. 2 3Os atributos devem ser final.
  • 17. Classe imutável Classe mutável 4 Caso sua classe tenha composição com objetos mutáveis, eles devem ter acesso exclusivo pela sua classe, devolvendo cópias defensivas.
  • 18.
  • 19. JAVA 25 ANOS Effective Java nos Métodos 3
  • 20. public boolean helpToMethod(){ Faça Cópias Defensivas quando necessário JAVA 25 ANOS Verifique a validade dos parâmetros Utilize Sobrecarga com critério Projete assinatura de métodos com cuidado Retorne coleções vazias em vez de nulas
  • 21. JAVA 25 ANOS Divisão de Camadas 4
  • 22. Um dos grandes problemas que desenvolvedores enfrentam no começo de carreira é sobre a divisão de camadas da aplicação.Existem dois conjuntos de padrões que são essenciais para entender estas divisões. Possui um conjunto de princípios que norteiam sobre a responsabilidade das camadas no desenvolvimento de software. GRASP Conjunto de responsabilidades de classes que criamos ao longo do desenvolvimento do software. Patterns of Enterprise Application JAVA 25 ANOS
  • 23. JAVA 25 ANOS Estrutura de Pacotes 5
  • 24. Simples de implementar e de entender. Não é boa em grande escala, a medida que o projeto cresce pode ficar complicado de organizar e encontrar o código, além disso não permite uma boa coesão. PACKAGE BY LAYER JAVA 25 ANOS
  • 25. Permite uma alta coesão dos recursos e visão das funcionalidades do sistema. Porém sua desvantagem é sua curva de aprendizagem, já que para este modelo é necessário bom conhecimento do negócio. Escopo amplo. PACKAGE BY FEATURE JAVA 25 ANOS
  • 30. O que o desenvolvedor fez O que o projeto pediu O que o usuário queria O que é?
  • 31. Principio KISS Keep It Simple Stupid, que significa Mantenha de forma estupidamente simples. Fazer algo simples pode demandar mais tempo do que fazer de forma complexa. Principio YAGNI You aren't gonna need it, ou seja, você não vai precisar disso. Este princípio afirma que uma funcionalidade não deve ser adicionada até que se faça necessária. Novas Features do Java "Me segura que eu quero usar ...<complete>" disse o programador que adora "inovar". Cuidado no Use de Streams, use novos recursos quando realmente fizer sentido. JAVA 25 ANOS
  • 32. JAVA 25 ANOS Fonte: Effective Java Exemplo do que NÃO fazer
  • 33. JAVA 25 ANOS Qualidade em Testes 8
  • 34. Quer saber se um teste vai garantir um comportamento? Image que haja modificação na estrutura do seu código, em caso que mude o comportamento seu teste deverá quebrar, certo? Pois então, em muitos casos os testes continuam passando. Passar o teste não significa que você tem qualidade JAVA 25 ANOS
  • 35. BDD TDD Testes de Mutação Testes de Unidade Testes de Contrato Testes de Integração JAVA 25 ANOS Testes de Componente Testes end-to-end Testes de Performance {
  • 36. JAVA 25 ANOS Code Style e Ferramentas de análise estática 9
  • 37. Code Style PersonalizadoQualidadePadrão JAVA 25 ANOS Modelos mais utilizados:
  • 38. Itens do Code Style do Twitter JAVA 25 ANOS ● ESTILO DE CODIFICAÇÃO ● FORMATAÇÃO ● DECLARAÇÕES DE CAMPO, CLASSE E MÉTODO ● NOMENCLATURA VARIÁVEL ● OPERADORES DE BLOCO DE ESPAÇO E IGUAIS ● IMPORTAÇÕES ● USE ANOTAÇÕES COM SABEDORIA ● USE INTERFACES ● ESCREVENDO CÓDIGO TESTÁVEL ● OBJETOS DE SUPORTE ● TESTANDO CÓDIGO MULTITHREAD ● TESTANDO ANTIPADRÕES ● EVITAR ALEATORIEDADE NOS TESTES ● MELHORES PRÁTICAS ● PROGRAMAÇÃO DEFENSIVA ● CÓDIGO LIMPO ● USE BIBLIOTECAS MAIS NOVAS / MELHORES
  • 39. Ferramentas de análise estática JAVA 25 ANOS Identificar e corrigir problemas rapidamente. Facilita a implementação do Code Style
  • 40. JAVA 25 ANOS Pair Programming 10
  • 42. > Rotação dos pares Planejamento Presencial - Espaço fisico Remoto - Ferramentas O que fazer
  • 44. JAVA 25 ANOS Code Review E Pull Request 11
  • 45. Pull Request JAVA 25 ANOS Coloque uma boa descrição. Motivo de algumas decisões foram tomadas e abordagens verificadas antes da tomada de decisão. Impacto das alterações. Métricas de análise da modificação ou links de referência. Cards e tarefas relacionadas ao PR
  • 46. JAVA 25 ANOS Code Review Faça perguntas e comentários que agreguem. Automatize o que for possível. Dados e fatos técnicos substituem opiniões e preferências pessoais. integrar ao processo existente da equipe Melhora o nível técnico do Time. Identificar e corrigir problemas rapidamente. Melhora futuros planejamentos.
  • 47. O que analisar? JAVA 25 ANOS ● O CÓDIGO ESTÁ BEM PROJETADO? ● O CÓDIGO ESTÁ MAIS COMPLEXO DO QUE PRECISA SER? ● O CÓDIGO POSSUI TESTES APROPRIADOS? ● OS TESTES ESTÃO BEM PROJETADOS? ● OS NOMES SÃO CLAROS? ● O CÓDIGO ESTÁ DOCUMENTADO ADEQUADAMENTE? ● O CÓDIGO ESTÁ EM CONFORMIDADE COM O GUIA DE ESTILOS ?
  • 48. Comentários JAVA 25 ANOS ● SEJA ATENCIOSO. ● EXPLIQUE SEU RACIOCÍNIO E USE ORIENTAÇÕES EXPLÍCITAS, APENAS ABORDANDO O PONTO EM QUESTÃO E DEIXANDO O DESENVOLVEDOR DECIDIR. ● MOTIVE OS DESENVOLVEDORES A SIMPLIFICAR O CÓDIGO, EM VEZ DE APENAS EXPLICAR A COMPLEXIDADE PARA VOCÊ. ● ESPERE EXPLICAÇÕES SOBRE OS PONTOS LEVANTADOS.
  • 49. JAVA 25 ANOS Documentação e Configuração 12
  • 50. JAVA 25 ANOS Documentação deve ficar no projeto. Melhor documentação é o código. README do projeto deve descrever o que , onde, como e porquê. Código > Javadoc Externalize configuração da aplicação