SlideShare uma empresa Scribd logo

Boas práticas no desenvolvimento de software

Felipe
Felipe

Um pequeno conjunto de boas práticas para o desenvolvimento de software. O conteúdo é recomendado para desenvolvedores iniciantes ou intermediários. O foco é em desenvolvimento Web, baseado em Sistemas de Informação, com uma linguagem fracamente tipada. Os exemplos são dados na linguagem PHP.

1 de 22
Baixar para ler offline
Boas Práticas no
Desenvolvimento de
Software
60 - 90 minutos
Atualizado: Julho 2015 falmeida1988@gmail.com
Com foco especial em aplicativos Web, tipagem fraca,
sistemas de informação. (Exemplos em PHP)
Princípios gerais
● Consistência
○ Senão fica muito trabalhoso entender o sistema
● Cérebro humano é limitado
○ 7 ± 2 coisas ao mesmo tempo é o limite
■ métodos em uma classe, classes em um módulo, etc
● Comentários
○ São para dizer o porquê e não o como. O como é o próprio código
que diz (se for bem-feito, com componentes auto-explicativos)
● Legibilidade
○ O código é, em geral, lido mais frequentemente do que escrito
Princípios gerais
● Testes
○ Sem testes você não tem como saber se alguma parte da sua
aplicação deixou de funcionar depois de uma modificação
● Objetivos eternos:
○ Baixo acoplamento
○ Reduzir complexidade
■ Usando abstrações (exemplo?)
● A característica mais importante do código é “quão fácil é modificá-lo?”
Princípios gerais
● Se você não tomar medidas para manter a estrutura do seu projeto, ele irá
acabar uma massa amorfa impossível de entender ou de mudar
● “Privado até prova em contrário” (por que?)
● Vai haver casos em que você vai precisar quebrar um desses princípios
para resolver algum problema urgente, mas saiba que isso tem um custo,
que vai aumentando com o tempo. Isso é uma dívida técnica (technical
debt) que você vai ter que pagar mais cedo ou mais tarde.
Nomes auto-explicativos
Razão
● Dá pra entender o que está sendo feito só de se ver o nome das coisas
● Não precisa tanto de comentários
Anti-exemplo
// fazendo a média de todas as idades recebidas
$a = func2($b);
Exemplo
$mediaIdades = calculaMedia($idades);
Coisas explícitas em vez de implícitas
Razão
● Mais fácil de entender o código depois
○ Mesmo por você
● Mais fácil de reusar e refatorar (por que?)
● Mesmo em um método de instância (em um objeto), às vezes é melhor
passar os parâmetros explicitamente (como argumentos) em vez de pegar
tudo do $this ou de alguma coisa implícita (como variáveis globais).

Recomendados

Aula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de SoftwareAula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de SoftwareCloves da Rocha
 
Qualidade de Software: Teste de software
Qualidade de Software: Teste de softwareQualidade de Software: Teste de software
Qualidade de Software: Teste de softwareAlex Camargo
 
Apostila Programação Java
Apostila Programação JavaApostila Programação Java
Apostila Programação Javainfo_cimol
 
Aula 01 - JavaScript: Introdução
Aula 01 - JavaScript: IntroduçãoAula 01 - JavaScript: Introdução
Aula 01 - JavaScript: IntroduçãoJessyka Lage
 

Mais conteúdo relacionado

Mais procurados

Algoritmos e lp parte 1-introdução
Algoritmos e lp parte 1-introduçãoAlgoritmos e lp parte 1-introdução
Algoritmos e lp parte 1-introduçãoMauro Pereira
 
Barramentos (continuação) e memória interna
Barramentos (continuação) e memória internaBarramentos (continuação) e memória interna
Barramentos (continuação) e memória internaPAULO Moreira
 
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplina
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplinaFundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplina
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplinaHelder Lopes
 
Validação e Testes de software
Validação e Testes de softwareValidação e Testes de software
Validação e Testes de softwareRondinelli Mesquita
 
Formatei o computador e agora?
Formatei o computador e agora?Formatei o computador e agora?
Formatei o computador e agora?Suzana Viana Mota
 
Conceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de SistemasConceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de SistemasClayton de Almeida Souza
 
Arquitetura e Montagem de Computadores.pdf
Arquitetura e Montagem de Computadores.pdfArquitetura e Montagem de Computadores.pdf
Arquitetura e Montagem de Computadores.pdfOs Fantasmas !
 
Introdução à Qualidade e Testes Ágeis de Software
Introdução à Qualidade e Testes Ágeis de SoftwareIntrodução à Qualidade e Testes Ágeis de Software
Introdução à Qualidade e Testes Ágeis de SoftwareClaudia Melo
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 

Mais procurados (20)

Criação de Sites web Tutorial
Criação de Sites web TutorialCriação de Sites web Tutorial
Criação de Sites web Tutorial
 
Teste de Aceitação: problemas, desafios e abordagens
Teste de Aceitação: problemas, desafios e abordagensTeste de Aceitação: problemas, desafios e abordagens
Teste de Aceitação: problemas, desafios e abordagens
 
Algoritmos e lp parte 1-introdução
Algoritmos e lp parte 1-introduçãoAlgoritmos e lp parte 1-introdução
Algoritmos e lp parte 1-introdução
 
Aula 2 - Modelos de processos
Aula 2 -  Modelos de processosAula 2 -  Modelos de processos
Aula 2 - Modelos de processos
 
Aula capitulo9 diagrama_estados
Aula capitulo9 diagrama_estadosAula capitulo9 diagrama_estados
Aula capitulo9 diagrama_estados
 
Barramentos (continuação) e memória interna
Barramentos (continuação) e memória internaBarramentos (continuação) e memória interna
Barramentos (continuação) e memória interna
 
Métodos de avaliação de IHC
Métodos de avaliação de IHCMétodos de avaliação de IHC
Métodos de avaliação de IHC
 
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplina
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplinaFundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplina
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplina
 
Validação e Testes de software
Validação e Testes de softwareValidação e Testes de software
Validação e Testes de software
 
Formatei o computador e agora?
Formatei o computador e agora?Formatei o computador e agora?
Formatei o computador e agora?
 
Introdução CSS
Introdução CSSIntrodução CSS
Introdução CSS
 
Conceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de SistemasConceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de Sistemas
 
Arquitetura e Montagem de Computadores.pdf
Arquitetura e Montagem de Computadores.pdfArquitetura e Montagem de Computadores.pdf
Arquitetura e Montagem de Computadores.pdf
 
Engenharia reversa
Engenharia reversaEngenharia reversa
Engenharia reversa
 
Introdução à Qualidade e Testes Ágeis de Software
Introdução à Qualidade e Testes Ágeis de SoftwareIntrodução à Qualidade e Testes Ágeis de Software
Introdução à Qualidade e Testes Ágeis de Software
 
Html básico 4 tabelas
Html básico 4   tabelasHtml básico 4   tabelas
Html básico 4 tabelas
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Aula 6 - Qualidade de Software
Aula 6 - Qualidade de SoftwareAula 6 - Qualidade de Software
Aula 6 - Qualidade de Software
 
Aula 07 Css - Parte 1
Aula 07   Css - Parte 1Aula 07   Css - Parte 1
Aula 07 Css - Parte 1
 

Semelhante a Boas práticas no desenvolvimento de software

Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoJuciellen Cabrera
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Luís Cobucci
 
TDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersTDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersStefan Teixeira
 
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Pablo Dall'Oglio
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Luís Cobucci
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3Inael Rodrigues
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012Luís Cobucci
 
BSDDAY 2019 - Data Science e Artificial Intelligence usando Freebsd
BSDDAY 2019 - Data Science e Artificial Intelligence usando FreebsdBSDDAY 2019 - Data Science e Artificial Intelligence usando Freebsd
BSDDAY 2019 - Data Science e Artificial Intelligence usando FreebsdMauro Risonho de Paula Assumpcao
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Gilmar PSL
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SThoughtworks
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisrafaelberlanda
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasRafael Chinelato Del Nero
 
Clean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareClean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareGabriel Felipe Soares
 

Semelhante a Boas práticas no desenvolvimento de software (20)

Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no código
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
TDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersTDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para Testers
 
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011
 
Cs 2
Cs 2Cs 2
Cs 2
 
Clean Code
Clean CodeClean Code
Clean Code
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 
BSDDAY 2019 - Data Science e Artificial Intelligence usando Freebsd
BSDDAY 2019 - Data Science e Artificial Intelligence usando FreebsdBSDDAY 2019 - Data Science e Artificial Intelligence usando Freebsd
BSDDAY 2019 - Data Science e Artificial Intelligence usando Freebsd
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.S
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portais
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivas
 
Linguagem C - Funções
Linguagem C - FunçõesLinguagem C - Funções
Linguagem C - Funções
 
Clean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareClean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de Software
 

Mais de Felipe

Aula rotulação automática - Automatic tagging
Aula rotulação automática - Automatic taggingAula rotulação automática - Automatic tagging
Aula rotulação automática - Automatic taggingFelipe
 
First steps with Keras 2: A tutorial with Examples
First steps with Keras 2: A tutorial with ExamplesFirst steps with Keras 2: A tutorial with Examples
First steps with Keras 2: A tutorial with ExamplesFelipe
 
Word embeddings introdução, motivação e exemplos
Word embeddings  introdução, motivação e exemplosWord embeddings  introdução, motivação e exemplos
Word embeddings introdução, motivação e exemplosFelipe
 
Cloud Certifications - Overview
Cloud Certifications - OverviewCloud Certifications - Overview
Cloud Certifications - OverviewFelipe
 
Elasticsearch for Data Analytics
Elasticsearch for Data AnalyticsElasticsearch for Data Analytics
Elasticsearch for Data AnalyticsFelipe
 
Cloudwatch: Monitoring your Services with Metrics and Alarms
Cloudwatch: Monitoring your Services with Metrics and AlarmsCloudwatch: Monitoring your Services with Metrics and Alarms
Cloudwatch: Monitoring your Services with Metrics and AlarmsFelipe
 
Cloudwatch: Monitoring your AWS services with Metrics and Alarms
Cloudwatch: Monitoring your AWS services with Metrics and AlarmsCloudwatch: Monitoring your AWS services with Metrics and Alarms
Cloudwatch: Monitoring your AWS services with Metrics and AlarmsFelipe
 
Online Machine Learning: introduction and examples
Online Machine Learning:  introduction and examplesOnline Machine Learning:  introduction and examples
Online Machine Learning: introduction and examplesFelipe
 
Aws cost optimization: lessons learned, strategies, tips and tools
Aws cost optimization: lessons learned, strategies, tips and toolsAws cost optimization: lessons learned, strategies, tips and tools
Aws cost optimization: lessons learned, strategies, tips and toolsFelipe
 
Exemplos de uso de apache spark usando aws elastic map reduce
Exemplos de uso de apache spark usando aws elastic map reduceExemplos de uso de apache spark usando aws elastic map reduce
Exemplos de uso de apache spark usando aws elastic map reduceFelipe
 
Pré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache SparkPré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache SparkFelipe
 
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...Felipe
 
Rachinations
RachinationsRachinations
RachinationsFelipe
 
Ausgewählte preußische Tugenden
Ausgewählte preußische TugendenAusgewählte preußische Tugenden
Ausgewählte preußische TugendenFelipe
 
Short intro to scala and the play framework
Short intro to scala and the play frameworkShort intro to scala and the play framework
Short intro to scala and the play frameworkFelipe
 
Conceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoConceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoFelipe
 
DevOps Series: Extending vagrant with Puppet for configuration management
DevOps Series: Extending vagrant with Puppet for configuration managementDevOps Series: Extending vagrant with Puppet for configuration management
DevOps Series: Extending vagrant with Puppet for configuration managementFelipe
 
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrant
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrantDevOps Series: Defining and Sharing Testable Machine Configurations with vagrant
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrantFelipe
 
D3.js 30-minute intro
D3.js   30-minute introD3.js   30-minute intro
D3.js 30-minute introFelipe
 

Mais de Felipe (19)

Aula rotulação automática - Automatic tagging
Aula rotulação automática - Automatic taggingAula rotulação automática - Automatic tagging
Aula rotulação automática - Automatic tagging
 
First steps with Keras 2: A tutorial with Examples
First steps with Keras 2: A tutorial with ExamplesFirst steps with Keras 2: A tutorial with Examples
First steps with Keras 2: A tutorial with Examples
 
Word embeddings introdução, motivação e exemplos
Word embeddings  introdução, motivação e exemplosWord embeddings  introdução, motivação e exemplos
Word embeddings introdução, motivação e exemplos
 
Cloud Certifications - Overview
Cloud Certifications - OverviewCloud Certifications - Overview
Cloud Certifications - Overview
 
Elasticsearch for Data Analytics
Elasticsearch for Data AnalyticsElasticsearch for Data Analytics
Elasticsearch for Data Analytics
 
Cloudwatch: Monitoring your Services with Metrics and Alarms
Cloudwatch: Monitoring your Services with Metrics and AlarmsCloudwatch: Monitoring your Services with Metrics and Alarms
Cloudwatch: Monitoring your Services with Metrics and Alarms
 
Cloudwatch: Monitoring your AWS services with Metrics and Alarms
Cloudwatch: Monitoring your AWS services with Metrics and AlarmsCloudwatch: Monitoring your AWS services with Metrics and Alarms
Cloudwatch: Monitoring your AWS services with Metrics and Alarms
 
Online Machine Learning: introduction and examples
Online Machine Learning:  introduction and examplesOnline Machine Learning:  introduction and examples
Online Machine Learning: introduction and examples
 
Aws cost optimization: lessons learned, strategies, tips and tools
Aws cost optimization: lessons learned, strategies, tips and toolsAws cost optimization: lessons learned, strategies, tips and tools
Aws cost optimization: lessons learned, strategies, tips and tools
 
Exemplos de uso de apache spark usando aws elastic map reduce
Exemplos de uso de apache spark usando aws elastic map reduceExemplos de uso de apache spark usando aws elastic map reduce
Exemplos de uso de apache spark usando aws elastic map reduce
 
Pré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache SparkPré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache Spark
 
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...
Hadoop MapReduce and Apache Spark on EMR: comparing performance for distribut...
 
Rachinations
RachinationsRachinations
Rachinations
 
Ausgewählte preußische Tugenden
Ausgewählte preußische TugendenAusgewählte preußische Tugenden
Ausgewählte preußische Tugenden
 
Short intro to scala and the play framework
Short intro to scala and the play frameworkShort intro to scala and the play framework
Short intro to scala and the play framework
 
Conceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoConceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de código
 
DevOps Series: Extending vagrant with Puppet for configuration management
DevOps Series: Extending vagrant with Puppet for configuration managementDevOps Series: Extending vagrant with Puppet for configuration management
DevOps Series: Extending vagrant with Puppet for configuration management
 
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrant
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrantDevOps Series: Defining and Sharing Testable Machine Configurations with vagrant
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrant
 
D3.js 30-minute intro
D3.js   30-minute introD3.js   30-minute intro
D3.js 30-minute intro
 

Boas práticas no desenvolvimento de software

  • 1. Boas Práticas no Desenvolvimento de Software 60 - 90 minutos Atualizado: Julho 2015 falmeida1988@gmail.com Com foco especial em aplicativos Web, tipagem fraca, sistemas de informação. (Exemplos em PHP)
  • 2. Princípios gerais ● Consistência ○ Senão fica muito trabalhoso entender o sistema ● Cérebro humano é limitado ○ 7 ± 2 coisas ao mesmo tempo é o limite ■ métodos em uma classe, classes em um módulo, etc ● Comentários ○ São para dizer o porquê e não o como. O como é o próprio código que diz (se for bem-feito, com componentes auto-explicativos) ● Legibilidade ○ O código é, em geral, lido mais frequentemente do que escrito
  • 3. Princípios gerais ● Testes ○ Sem testes você não tem como saber se alguma parte da sua aplicação deixou de funcionar depois de uma modificação ● Objetivos eternos: ○ Baixo acoplamento ○ Reduzir complexidade ■ Usando abstrações (exemplo?) ● A característica mais importante do código é “quão fácil é modificá-lo?”
  • 4. Princípios gerais ● Se você não tomar medidas para manter a estrutura do seu projeto, ele irá acabar uma massa amorfa impossível de entender ou de mudar ● “Privado até prova em contrário” (por que?) ● Vai haver casos em que você vai precisar quebrar um desses princípios para resolver algum problema urgente, mas saiba que isso tem um custo, que vai aumentando com o tempo. Isso é uma dívida técnica (technical debt) que você vai ter que pagar mais cedo ou mais tarde.
  • 5. Nomes auto-explicativos Razão ● Dá pra entender o que está sendo feito só de se ver o nome das coisas ● Não precisa tanto de comentários Anti-exemplo // fazendo a média de todas as idades recebidas $a = func2($b); Exemplo $mediaIdades = calculaMedia($idades);
  • 6. Coisas explícitas em vez de implícitas Razão ● Mais fácil de entender o código depois ○ Mesmo por você ● Mais fácil de reusar e refatorar (por que?) ● Mesmo em um método de instância (em um objeto), às vezes é melhor passar os parâmetros explicitamente (como argumentos) em vez de pegar tudo do $this ou de alguma coisa implícita (como variáveis globais).
  • 7. Coisas explícitas em vez de implícitas Anti-exemplo class User{ //não tem como saber (de fora) o que esta função usa sem olhar seu código public function calculaPontos() { $data = $this->foo-> getData(); //linhas de código $empresa = $this-> getEmpresa(); // mais linhas de código $historicoDeCompras = Helper::getHistoricoDeCompras ($usuario,$data); // mais linhas de código return $resultado;
  • 8. Coisas explícitas em vez de implícitas Exemplo // está óbvio que este método calcula pontos para um usuário levando em // consideração a data, sua empresa e seu histórico de compras class User{ public function calculaPontos($data,$empresa,$historicoDeCompras){ // corpo do método } Note que, no anti-exemplo, um potencial usuário precisa saber, de antemão, que um User precisa ter uma Empresa definida pois caso contrário o método getEmpresa() pode gerar um erro. Isto é mais uma coisa implícita que, no exemplo dado, torna-se explícita, impedindo possíveis erros.
  • 9. Lei de Demeter “Não fale com o vizinho do seu vizinho” Razão ● Aumenta complexidade ● Aumenta acoplamento Anti-exemplo // uma mudança em qualquer dos componentes da cadeia vai quebrar esse código $anoDeFundacao = $user ->getEmpresa() ->getMatriz() ->getDataDeFundacao() ->getAno();
  • 10. Lei de Demeter Exemplo // comportamento delegado para a classe User // o código atual não é afetado por mudanças na obtenção do ano de fundação $anoDeFundacao = $user-> getAnoDeFundacao() ;
  • 11. Asserts nos lugares certos Razão ● Garantir que, de um ponto em diante, uma certa condição é verdadeira ○ Só para coisas que nunca devem ser false ● Dar “pistas”, para quem está lendo, do que você está fazendo Exemplo $pessoas = Pessoa::getAll(); //do banco de dados $pontuacoes = funcaoComplicadaQueCalculaPontosParaPessoas ($pessoas); $cores = funcaoComplicadaQuePegaACorPreferidaDeCadaPessoa ($pessoa); assert( count($pontuacoes) === count($cores) ); //se esse assert falhar, há algo errado //melhor descobrir agora do que mais à frente
  • 12. Edge cases (casos-limite) Razão ● Nós só costumamos pensar nos casos comuns que uma função deve atender Anti-exemplo function avg(array $arr){ $sum = 0; $size = count($arr); foreach($arr as $num){ $sum += $num; } return $sum/$size; //quando isso pode dar errado? }
  • 13. Escolheu um jeito, fique com ele Razão ● Pessoas não conseguem criar um modelo mental do seu projeto se ele não for consistente Exemplos ● Nomenclatura de variáveis ● Estrutura de classes, arquivos
  • 14. Passar operações para fora dos loops sempre que possível Razão ● Às vezes a gente pode criar um problema sem perceber ● Muitas vezes uma informação é constante para todas as execuções de um loop Exemplos ● Operações no banco de dados ● Outros tipos de operações pesadas
  • 15. Value Objects Quando você tem muitos pequenos dados que precisam ser manipulados juntos Razão ● Evitar ter que definir uma função que recebe 15 parâmetros ● Podemos capturar erros mais cedo (vai dar erro se o VO passado não for do tipo correto) Anti-exemplo $relatorio = geraRelatorio($itens,$dataInicio,$dataFim, $secoes,$incluirGraficos,$incluirInformacoesGerais,$estilo,$nome);
  • 16. Value Objects Exemplo $opcoesVO = new OpcoesDoRelatorioVO($itens,$dataInicio, $dataFim,$incluirGraficos,$incluirInformacoesGerais,$estilo,$nome); // código mais simples, mais fácil entender e mais fácil de mudar $relatorio = geraRelatorio($opcoesVO);
  • 17. Métodos e classes devem devem fazer poucas coisas Razão ● 7 ± 2 ● Facilidade de reuso, manutenção Anti-Exemplo // um nome vago assim já é um sintoma sério public function getResultadoCorreto ($params){ // 600 linhas de código }
  • 18. Métodos e classes devem devem fazer poucas coisas Extra ● Classes que representam entidades e tabelas do Banco (modelos) vs o resto ● Não helperizar seus modelos nem controllers
  • 19. Programação Top down “Pensar no todo antes de criar as partes” Razão ● Se você cria as partes (funções e classes individuais) que você acha que serão necessárias antes de pensar a estrutura do projeto, você pode acabar tendo que “entortar” a estrutura para que consiga usar as partes que você já criou.
  • 20. Programação Top down Anti-Exemplo ● Preciso criar um sistema para gerar relatórios. ● “Vou criar logo a parte das consultas de banco de dados pois já sei que serão necessárias.” ● Com essas partes prontas, vou começar a fazer o loop principal do sistema (exemplo?) ○ Agora vi que vou precisar consultar um CSV também. Vou adicionar um parâmetro às funções do banco para resolver isso. ○ Agora vi que vou precisar gerar resultados em PDF também então vou adicionar um parâmetro a todas as funções de consulta a dados que foram feitas para que modifiquem o output. ● 9 meses depois o sistema está desorganizado e sem estrutura
  • 21. Programação Top down Exemplo ● Preciso criar um sistema para gerar relatórios. ● Vou criar a estrutura principal “fingindo” que as partes já foram criadas (exemplo?)
  • 22. DRY Don’t repeat yourself Razão ● Evitar retrabalho ● Evitar erros (corrigiu uma vez, todos os clientes estão OK)