CLEAN CODE Frescura ou necessidade?       Thiago Faria        @ThiagoFAndrade        www.algaworks.com
Está cheio de lambanças        por aí...
Merece um 10           http://www.flickr.com/photos/ricksphotos101/3510477227/
Merece um 10           http://www.flickr.com/photos/ricksphotos101/3510477227/
Boa ideia!             http://www.flickr.com/photos/kwramsauer/2787249358/
Boa ideia!             http://www.flickr.com/photos/kwramsauer/2787249358/
Parabéns!http://www.flickr.com/photos/william_veerbeek/3875437689/
Parabéns!http://www.flickr.com/photos/william_veerbeek/3875437689/
OMFG!        http://www.flickr.com/photos/officeglen/83359172/
OMFG!        http://www.flickr.com/photos/officeglen/83359172/
OMFG!        http://www.flickr.com/photos/officeglen/83359172/
E nós, programadores?     http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
E nós, programadores?     http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
E nós, programadores?     http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
Java Programmer                                                                Web DesignerUI Programmer                Co...
Porque priorizamos apenas   código que funciona?
• Cronogramas apertados
• Cronogramas apertados• Usuários com necessidades urgentes
• Cronogramas apertados• Usuários com necessidades urgentes• Pressão do gerente
• Cronogramas apertados• Usuários com necessidades urgentes• Pressão do gerente• “Quero mostrar que sou produtivo”
Código ruim custa caro                 http://www.flickr.com/photos/amagill/3366720659/
Código ruim custa caro                 http://www.flickr.com/photos/amagill/3366720659/
Código ruim dá preguiça            http://spirithalloween.com/images/spirit/products/processed/00593418.detail.a.jpg
Código ruim gera frustração                    http://www.flickr.com/photos/zachklein/54389823/
Código ruim precisa de muitos, mas muitos      remendos                   http://www.pinbax.com/items/4566.jpg
Código ruim precisa de muitos, mas muitos      remendos                   http://www.pinbax.com/items/4566.jpg
Código ruim gera lentidão       (baixa produtividade)                               http://www.flickr.com/photos/johnlamb/2...
Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
Produtividade vs Tempo                100                 75Produtividade                 50                 25           ...
Produtividade vs Tempo                100                 75Produtividade                 50                 25           ...
Produtividade vs Tempo                100                 75                                                              ...
http://www.flickr.com/photos/michigancommunities/5169810229/
O que podemos fazer paramelhorar nossa produtividade?          http://www.flickr.com/photos/michigancommunities/5169810229/
Coloque mais  pressão!                O que podemos fazer para               melhorar nossa produtividade?                ...
Coloque mais  pressão!                O que podemos fazer para               melhorar nossa produtividade?                ...
http://www.flickr.com/photos/worldofoddy/757149070/
Mais pessoas para ajudar a    fazer código sujo            http://www.flickr.com/photos/worldofoddy/757149070/
Código ruim pode matar      um projeto http://jamaicanmusics.com/wp-content/uploads/2012/06/shotgun.jpg, http://www.flickr....
Código ruim pode matar      um projeto http://jamaicanmusics.com/wp-content/uploads/2012/06/shotgun.jpg, http://www.flickr....
Código ruim pode destruir      uma empresa http://www.flickr.com/photos/penguincakes/4074411788/
Tem gente que acha que código ruimpode acabar com o mundo!                          http://good-wallpapers.com/pictures/36...
A culpa é nossa  http://www.artsjournal.com/aboutlastnight/pointing-finger.jpg
Sintomas de código ruim
Inflexívelhttp://infosurhoy.com/cocoon/saii/images/2012/06/08/photo4D.jpg
Frágilhttp://www.flickr.com/photos/ocreactive/2280732355/
Inseparávelhttp://www.flickr.com/photos/momono/4459805690/
Opacohttp://www.flickr.com/photos/avlxyz/5432778291/
http://commadot.com/wp-content/uploads/2009/02/wtf.png
O que é código limpo?Bjarne Stroustrup                     Grady Booch                        Michael Feathers            ...
O que é código limpo?Elegante e eficiente. Código limpo faz  bem uma coisa.        Bjarne Stroustrup                     Gr...
O que é código limpo?Elegante e eficiente.              Simples e direto. Código limpo faz                Pode ser lido com...
O que é código limpo?Elegante e eficiente.              Simples e direto.                           Parece ter sido Código ...
O que é código limpo?Elegante e eficiente.              Simples e direto.                           Parece ter sido        ...
A regra do escoteiro“   Sempre deixe a área de acampamento mais                                                           ...
A regra do escoteiro  “   Sempre deixe a área de acampamento mais                                                         ...
Algumas técnicas     by Uncle Bob
Nomes significativos   • Revelam a intenção   • Devem ser pronunciáveis   • Fácil de pesquisar   • Evite nomes confusos
int d; // tempo gasto em dias
Não revela sua intençãoint d; // tempo gasto em dias        Se precisa de um comentário para          explicar isso, algo ...
Não revela sua intençãoint d; // tempo gasto em dias        Se precisa de um comentário para          explicar isso, algo ...
class Processar
Nomes de classes não                   devem ser verbosclass Processar
Nomes de classes não                     devem ser verbosclass Processarclass Processador      Processador de que?
Nomes de classes não                     devem ser verbosclass Processarclass Processador      Processador de que?class Pr...
class Fornecedor {   public void pagamento() {
Nomes de métodos devem ser                           verbosclass Fornecedor {   public void pagamento() {
Nomes de métodos devem ser                           verbosclass Fornecedor {   public void pagamento() {class Fornecedor ...
class PedComp {   private Date prvEnt;}
Difícil de ler, entender e pronunciarclass PedComp {   private Date prvEnt;}
Difícil de ler, entender e pronunciarclass PedComp {   private Date prvEnt;}class PedidoCompra {   private Date dataPrevis...
for (int i = 0; i < 10; i++) {   t[i] += p[i];}
Confuso e difícil de pesquisarfor (int i = 0; i < 10; i++) {   t[i] += p[i];}
Confuso e difícil de pesquisarfor (int i = 0; i < 10; i++) {   t[i] += p[i];}for (int i = 0; i < 10; i++) {   totais[i] +=...
Funções• Devem ser pequenas• Menores do que você imaginou• Devem fazer apenas uma coisa• Nível de identação não deve ser m...
public boolean validarSenha(String nomeUsuario, String senha) {   ...   if (usuario.getSenhaAtual().equals(senha) {       ...
public boolean validarSenha(String nomeUsuario, String senha) {   ...   if (usuario.getSenhaAtual().equals(senha) {       ...
void cadastrar(String nome, String email, int idade, double peso) {   ...}
Muitos parâmetros!void cadastrar(String nome, String email, int idade, double peso) {   ...}
Muitos parâmetros!void cadastrar(String nome, String email, int idade, double peso) {   ...}void cadastrar(Paciente pacien...
Comentários• São úteis se forem colocados nos lugares certos• Comentários não são atualizados, e por isso mentem e    não ...
// verifica se conta está usando cheque especialif (conta.tipo.equals(Tipo.CORRENTE) && conta.saldo < 0) {
// verifica se conta está usando cheque especialif (conta.tipo.equals(Tipo.CORRENTE) && conta.saldo < 0) {           Expli...
/**  * Construtor da classe.  */public Lancamento() {}
Sério?/**  * Construtor da classe.  */public Lancamento() {}
Sério?/**  * Construtor da classe.  */public Lancamento() {}                   Ahhh tá! Achei que era o/** * Dia do mês.  ...
Holy shit!try {   while (...) {      System.out.println(...);   } // while} // trycatch (SQLException e) {   e.printStackT...
Use controle de versãotry {   while (...) {      // adicionado por João das Couves      System.out.println(...);   }} catc...
Formatação• Classes menores são mais fáceis de entender• Conceitos relacionados devem ficar próximos• Sempre idente bem o c...
class Produto {   private int          codigo;   private Fornecedor   fornecedor;   private String       descricao;   priv...
class Produto {   private int          codigo;   private Fornecedor   fornecedor;   private String       descricao;   priv...
class Produto {   private int          codigo;   private Fornecedor   fornecedor;   private String       descricao;   priv...
public double calcular(int a,int b,int c){  double total=numero+(valor*outroValor);
Use espaços entre operadores,                      parâmetros e vírgulaspublic double calcular(int a,int b,int c){  double...
Use espaços entre operadores,                      parâmetros e vírgulaspublic double calcular(int a,int b,int c){  double...
Exceções• Lance exceções ao invés de retornar código de erro• Crie exceções com informações sobre o erro• Evite criar méto...
Cliente cliente = repositorioClientes.buscarPorCodigo(10);if (cliente != null) {   notificarPendencia(cliente.getEmail());}
Parece bom...Cliente cliente = repositorioClientes.buscarPorCodigo(10);if (cliente != null) {   notificarPendencia(cliente...
Parece bom...Cliente cliente = repositorioClientes.buscarPorCodigo(10);if (cliente != null) {   notificarPendencia(cliente...
Testes unitários• Considere usar TDD• Mantenha os testes limpos
Classes• Organize as declarações de variáveis e métodos• Classes devem ser pequenas• Princípio da Responsabilidade Única -...
class Cliente {   void cadastrar()   void emitirNotaFiscal()}
Muitas responsabilidadesclass Cliente {   void cadastrar()   void emitirNotaFiscal()}
Muitas responsabilidadesclass Cliente {   void cadastrar()   void emitirNotaFiscal()}class Cliente {   void cadastrar()}cl...
www.cleancoders.com
GRACIAS. Thiago Faria  @ThiagoFAndrade  www.algaworks.com
Clean Code - Frescura ou necessidade?
Clean Code - Frescura ou necessidade?
Clean Code - Frescura ou necessidade?
Clean Code - Frescura ou necessidade?
Clean Code - Frescura ou necessidade?
Upcoming SlideShare
Loading in …5
×

Clean Code - Frescura ou necessidade?

2,167 views

Published on

Palestra sobre Clean Code, ministrada no Maré de Agilidade (Uberlândia) em Agosto/2012.

Published in: Technology
  • Be the first to comment

Clean Code - Frescura ou necessidade?

  1. 1. CLEAN CODE Frescura ou necessidade? Thiago Faria @ThiagoFAndrade www.algaworks.com
  2. 2. Está cheio de lambanças por aí...
  3. 3. Merece um 10 http://www.flickr.com/photos/ricksphotos101/3510477227/
  4. 4. Merece um 10 http://www.flickr.com/photos/ricksphotos101/3510477227/
  5. 5. Boa ideia! http://www.flickr.com/photos/kwramsauer/2787249358/
  6. 6. Boa ideia! http://www.flickr.com/photos/kwramsauer/2787249358/
  7. 7. Parabéns!http://www.flickr.com/photos/william_veerbeek/3875437689/
  8. 8. Parabéns!http://www.flickr.com/photos/william_veerbeek/3875437689/
  9. 9. OMFG! http://www.flickr.com/photos/officeglen/83359172/
  10. 10. OMFG! http://www.flickr.com/photos/officeglen/83359172/
  11. 11. OMFG! http://www.flickr.com/photos/officeglen/83359172/
  12. 12. E nós, programadores? http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
  13. 13. E nós, programadores? http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
  14. 14. E nós, programadores? http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
  15. 15. Java Programmer Web DesignerUI Programmer Como você quer ser lembrado? http://www.flickr.com/photos/rajthesnapper/2418728391/
  16. 16. Porque priorizamos apenas código que funciona?
  17. 17. • Cronogramas apertados
  18. 18. • Cronogramas apertados• Usuários com necessidades urgentes
  19. 19. • Cronogramas apertados• Usuários com necessidades urgentes• Pressão do gerente
  20. 20. • Cronogramas apertados• Usuários com necessidades urgentes• Pressão do gerente• “Quero mostrar que sou produtivo”
  21. 21. Código ruim custa caro http://www.flickr.com/photos/amagill/3366720659/
  22. 22. Código ruim custa caro http://www.flickr.com/photos/amagill/3366720659/
  23. 23. Código ruim dá preguiça http://spirithalloween.com/images/spirit/products/processed/00593418.detail.a.jpg
  24. 24. Código ruim gera frustração http://www.flickr.com/photos/zachklein/54389823/
  25. 25. Código ruim precisa de muitos, mas muitos remendos http://www.pinbax.com/items/4566.jpg
  26. 26. Código ruim precisa de muitos, mas muitos remendos http://www.pinbax.com/items/4566.jpg
  27. 27. Código ruim gera lentidão (baixa produtividade) http://www.flickr.com/photos/johnlamb/2576062549/
  28. 28. Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
  29. 29. Produtividade vs Tempo 100 75Produtividade 50 25 0 Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
  30. 30. Produtividade vs Tempo 100 75Produtividade 50 25 0 Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
  31. 31. Produtividade vs Tempo 100 75 ?Produtividade 50 25 0 Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
  32. 32. http://www.flickr.com/photos/michigancommunities/5169810229/
  33. 33. O que podemos fazer paramelhorar nossa produtividade? http://www.flickr.com/photos/michigancommunities/5169810229/
  34. 34. Coloque mais pressão! O que podemos fazer para melhorar nossa produtividade? http://www.flickr.com/photos/michigancommunities/5169810229/
  35. 35. Coloque mais pressão! O que podemos fazer para melhorar nossa produtividade? Vamos contratar mais pessoas... http://www.flickr.com/photos/michigancommunities/5169810229/
  36. 36. http://www.flickr.com/photos/worldofoddy/757149070/
  37. 37. Mais pessoas para ajudar a fazer código sujo http://www.flickr.com/photos/worldofoddy/757149070/
  38. 38. Código ruim pode matar um projeto http://jamaicanmusics.com/wp-content/uploads/2012/06/shotgun.jpg, http://www.flickr.com/photos/iain/353671249/
  39. 39. Código ruim pode matar um projeto http://jamaicanmusics.com/wp-content/uploads/2012/06/shotgun.jpg, http://www.flickr.com/photos/iain/353671249/
  40. 40. Código ruim pode destruir uma empresa http://www.flickr.com/photos/penguincakes/4074411788/
  41. 41. Tem gente que acha que código ruimpode acabar com o mundo! http://good-wallpapers.com/pictures/3632/End%20of%20the%20World.jpg
  42. 42. A culpa é nossa http://www.artsjournal.com/aboutlastnight/pointing-finger.jpg
  43. 43. Sintomas de código ruim
  44. 44. Inflexívelhttp://infosurhoy.com/cocoon/saii/images/2012/06/08/photo4D.jpg
  45. 45. Frágilhttp://www.flickr.com/photos/ocreactive/2280732355/
  46. 46. Inseparávelhttp://www.flickr.com/photos/momono/4459805690/
  47. 47. Opacohttp://www.flickr.com/photos/avlxyz/5432778291/
  48. 48. http://commadot.com/wp-content/uploads/2009/02/wtf.png
  49. 49. O que é código limpo?Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da OO e co-criador da UML eXtreme Programming, etc http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5- DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
  50. 50. O que é código limpo?Elegante e eficiente. Código limpo faz bem uma coisa. Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da OO e co-criador da UML eXtreme Programming, etc http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5- DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
  51. 51. O que é código limpo?Elegante e eficiente. Simples e direto. Código limpo faz Pode ser lido como bem uma coisa. uma conversa. Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da OO e co-criador da UML eXtreme Programming, etc http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5- DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
  52. 52. O que é código limpo?Elegante e eficiente. Simples e direto. Parece ter sido Código limpo faz Pode ser lido como escrito por alguém bem uma coisa. uma conversa. que se importa. Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da OO e co-criador da UML eXtreme Programming, etc http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5- DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
  53. 53. O que é código limpo?Elegante e eficiente. Simples e direto. Parece ter sido Cada rotina que Código limpo faz Pode ser lido como escrito por alguém você lê faz o que bem uma coisa. uma conversa. que se importa. você espera. Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da OO e co-criador da UML eXtreme Programming, etc http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5- DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
  54. 54. A regra do escoteiro“ Sempre deixe a área de acampamento mais ” limpa que já estava. — Robert Stephenson Smyth Baden-Powell http://www.flickr.com/photos/zoovroo/2751792596/
  55. 55. A regra do escoteiro “ Sempre deixe a área de acampamento mais ” limpa que já estava. — Robert Stephenson Smyth Baden-PowellSempre deixe um código mais limpo que já estava. http://www.flickr.com/photos/zoovroo/2751792596/
  56. 56. Algumas técnicas by Uncle Bob
  57. 57. Nomes significativos • Revelam a intenção • Devem ser pronunciáveis • Fácil de pesquisar • Evite nomes confusos
  58. 58. int d; // tempo gasto em dias
  59. 59. Não revela sua intençãoint d; // tempo gasto em dias Se precisa de um comentário para explicar isso, algo está errado!
  60. 60. Não revela sua intençãoint d; // tempo gasto em dias Se precisa de um comentário para explicar isso, algo está errado!int tempoGastoEmDias;
  61. 61. class Processar
  62. 62. Nomes de classes não devem ser verbosclass Processar
  63. 63. Nomes de classes não devem ser verbosclass Processarclass Processador Processador de que?
  64. 64. Nomes de classes não devem ser verbosclass Processarclass Processador Processador de que?class ProcessadorDeRelatorio
  65. 65. class Fornecedor { public void pagamento() {
  66. 66. Nomes de métodos devem ser verbosclass Fornecedor { public void pagamento() {
  67. 67. Nomes de métodos devem ser verbosclass Fornecedor { public void pagamento() {class Fornecedor { public void pagar() {
  68. 68. class PedComp { private Date prvEnt;}
  69. 69. Difícil de ler, entender e pronunciarclass PedComp { private Date prvEnt;}
  70. 70. Difícil de ler, entender e pronunciarclass PedComp { private Date prvEnt;}class PedidoCompra { private Date dataPrevisaoEntrega;}
  71. 71. for (int i = 0; i < 10; i++) { t[i] += p[i];}
  72. 72. Confuso e difícil de pesquisarfor (int i = 0; i < 10; i++) { t[i] += p[i];}
  73. 73. Confuso e difícil de pesquisarfor (int i = 0; i < 10; i++) { t[i] += p[i];}for (int i = 0; i < 10; i++) { totais[i] += precos[i];}
  74. 74. Funções• Devem ser pequenas• Menores do que você imaginou• Devem fazer apenas uma coisa• Nível de identação não deve ser maior que 2• Sem parâmetros é melhor, 2 é bom, evite 3• Don’t Repeat Yourself (DRY)
  75. 75. public boolean validarSenha(String nomeUsuario, String senha) { ... if (usuario.getSenhaAtual().equals(senha) { return true; } usuario.bloquear(); return false;}
  76. 76. public boolean validarSenha(String nomeUsuario, String senha) { ... if (usuario.getSenhaAtual().equals(senha) { return true; } usuario.bloquear(); return false;} Métodos não devem ter efeitos colaterais
  77. 77. void cadastrar(String nome, String email, int idade, double peso) { ...}
  78. 78. Muitos parâmetros!void cadastrar(String nome, String email, int idade, double peso) { ...}
  79. 79. Muitos parâmetros!void cadastrar(String nome, String email, int idade, double peso) { ...}void cadastrar(Paciente paciente) { ...}
  80. 80. Comentários• São úteis se forem colocados nos lugares certos• Comentários não são atualizados, e por isso mentem e não são confiáveis• Comentários não fazem código ruim ficar melhor
  81. 81. // verifica se conta está usando cheque especialif (conta.tipo.equals(Tipo.CORRENTE) && conta.saldo < 0) {
  82. 82. // verifica se conta está usando cheque especialif (conta.tipo.equals(Tipo.CORRENTE) && conta.saldo < 0) { Explique-se com códigoif (conta.estaUsandoChequeEspecial()) {
  83. 83. /** * Construtor da classe. */public Lancamento() {}
  84. 84. Sério?/** * Construtor da classe. */public Lancamento() {}
  85. 85. Sério?/** * Construtor da classe. */public Lancamento() {} Ahhh tá! Achei que era o/** * Dia do mês. dia do século... */private int diaDoMes;
  86. 86. Holy shit!try { while (...) { System.out.println(...); } // while} // trycatch (SQLException e) { e.printStackTrace();} // catchfinally { conexao.close();} // finally
  87. 87. Use controle de versãotry { while (...) { // adicionado por João das Couves System.out.println(...); }} catch (SQLException e) { // Autora: Maria Abadia e.printStackTrace();} finally { // Fechando a conexão (Sebastião) conexao.close();}
  88. 88. Formatação• Classes menores são mais fáceis de entender• Conceitos relacionados devem ficar próximos• Sempre idente bem o código• Limite o tamanho de uma linha (sugestão de 120 caracteres)• Combine um estilo de formatação entre a equipe
  89. 89. class Produto { private int codigo; private Fornecedor fornecedor; private String descricao; private Date dataUltimaCompra;}
  90. 90. class Produto { private int codigo; private Fornecedor fornecedor; private String descricao; private Date dataUltimaCompra;}
  91. 91. class Produto { private int codigo; private Fornecedor fornecedor; private String descricao; private Date dataUltimaCompra;}class Produto { private int codigo; private Fornecedor fornecedor; private String descricao; private Date dataUltimaCompra;}
  92. 92. public double calcular(int a,int b,int c){ double total=numero+(valor*outroValor);
  93. 93. Use espaços entre operadores, parâmetros e vírgulaspublic double calcular(int a,int b,int c){ double total=numero+(valor*outroValor);
  94. 94. Use espaços entre operadores, parâmetros e vírgulaspublic double calcular(int a,int b,int c){ double total=numero+(valor*outroValor);public double calcular(int a, int b, int c) { double total = numero + (valor * outroValor);
  95. 95. Exceções• Lance exceções ao invés de retornar código de erro• Crie exceções com informações sobre o erro• Evite criar métodos que retornam null• Não passe null como parâmetro
  96. 96. Cliente cliente = repositorioClientes.buscarPorCodigo(10);if (cliente != null) { notificarPendencia(cliente.getEmail());}
  97. 97. Parece bom...Cliente cliente = repositorioClientes.buscarPorCodigo(10);if (cliente != null) { notificarPendencia(cliente.getEmail());}
  98. 98. Parece bom...Cliente cliente = repositorioClientes.buscarPorCodigo(10);if (cliente != null) { notificarPendencia(cliente.getEmail());} Mas pode ficar melhor, se o método lançar exceção ao invés de retornar nullCliente cliente = repositorioClientes.buscarPorCodigo(10);notificarPendencia(cliente.getEmail());
  99. 99. Testes unitários• Considere usar TDD• Mantenha os testes limpos
  100. 100. Classes• Organize as declarações de variáveis e métodos• Classes devem ser pequenas• Princípio da Responsabilidade Única - SRP
  101. 101. class Cliente { void cadastrar() void emitirNotaFiscal()}
  102. 102. Muitas responsabilidadesclass Cliente { void cadastrar() void emitirNotaFiscal()}
  103. 103. Muitas responsabilidadesclass Cliente { void cadastrar() void emitirNotaFiscal()}class Cliente { void cadastrar()}class NotaFiscal { void emitir()}
  104. 104. www.cleancoders.com
  105. 105. GRACIAS. Thiago Faria @ThiagoFAndrade www.algaworks.com

×