Boas práticas de programação, no NodeJS
- Organizador do NodeSchool Campinas
- Desenvolvedor NodeJS na
- Desculpem por vicios de linguagem e afins
- ❤️ JavaScript | Docker | NoSQL
- ❤️ Comunidades | Descentralização da Internet
- ❤️ Democracia organizaçonal | DevOps | Bitcoin
- ❤️ Cypherpunks | Bitcoin | Teclados Mecânicos
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/4294083/perin.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866799/lambda3.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866838/Peek_2019-12-07_00-02.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866842/pasted-from-clipboard.png)
lb3.io/vagas-site
Livros Importantes
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866845/books.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6867056/p_b3d278fe-7c11-4704-bf89-2b3c5b4c8936_large.jpg.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6867057/will.jpg)
O universo da programação
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866846/clean-code.png)
Guia do Mestre Programador
Pensando como pirata, evoluindo como jedi
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866856/guia-do-mestre-programador.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866852/clean-coder.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866862/uncle-bob.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866863/uncle-bob-removebg-preview.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866865/31d8a10b57d900b5d554a7a7a978f5ec0c27f483_hq.gif)
O programador apaixonado
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866849/passionate-programmer.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866850/programador-apaixonado-featured_large.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866872/ddd.jpg)
Domain-Driven Design (DDD)
Clean Architecture
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866854/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866868/clean-architecture.jpg)
O que significa
boas praticas e qualidade
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866992/boas-praticas_de_software.gif)
Para o desenvolvimento de softwares de qualidade é necessário dominar um conjunto de habilidades e conhecimentos que fazem com que o este processo se mantenha organizado e com crescimento constante, esse conjunto de técnicas quando utilizado de forma saudável pode ser descrito como boas práticas.
Pédia, Wiki.
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6862793/pasted-from-clipboard.png)
Não medir qualidade
"Corte de custos" sem diminuir qualidade não existe
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6862803/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866873/hearth.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6862831/pasted-from-clipboard.png)
Nove mulheres não fazem um filho em 1 mês.
O contrário também não
!
12-factor app
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6867077/pasted-from-clipboard.png)
é uma metodologia para construir softwares-como-serviço
Qualidade de Arquitetura
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866876/architecture-ai.gif)
The hierarchic of your project folders should tell what it does, not what language or framework it belongs.
Bob, Uncle.
Evite o UDD
Util Driven Development
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6862777/pasted-from-clipboard.png)
Use um Registry
Se seu código tiver regras de negócio, use um privado
- npm (pago)
- verdaccio (free, self-hosted)
- gitlab (pago)
- github (pago)
- azure artifacts (pago)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866947/pasted-from-clipboard.png)
Analise a fundo suas dependencias
- Procure entender exatamente o que ela faz
- Sempre existem prós e contras
- Converse com quem usa, com os dev, com a comunidade
- Leia o código fonte
Injeção de dependência
e
Currying
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6867021/pasted-from-clipboard.png)
Qualidade de Código
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866878/js.gif)
Linter
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866896/Peek_2019-12-07_01-22.gif)
ESLint
+
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866906/1_ODJ3DFXcUs3P6UMNor0u6w.png)
Tipagem
typescript
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866880/typescript-interface.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866881/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866908/babel.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866915/babel.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866881/pasted-from-clipboard.png)
Aprenda paradigmas, não os decore
- Programação Orientada a Objetos
- JS tem objetos baseados em protótipos, não em classes
- Aprenda a usar design patterns
- Programação Funcional
- Aprenda o basico do paradigma (e não para de avançar)
- Aprenda a abstrair baseado em funções
- Entenda estados locais e estados globais
Clean Code
(finalmente)
- Obrigação de todo o dev: ler clean code
- github.com/ryanmcdermott/clean-code-javascript
- não decore, crie o habito de revisitar o livro e repositórios
Qualidade de Testes
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6866972/scientific-testing.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6862852/pasted-from-clipboard.png)
Sempre, sempre
Siga a piramide de testes
Eu to falando com você também, sr Serverless.
Testes de Unidade
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6862864/pasted-from-clipboard.png)
O propósito é testar 1 unidade de código
(não é apenas uma função!!)
Arrange -> Act -> Assert
Manter a complexidade fora da sua cabeça
Outras boas práticas em testes
- Testes devem ser independentes
- Troque a ordem
- Devem rodar sozinhos
- Testes unitários devem ser instantaneos
- Feedback loop
- Rode a todo ciclo de desenvolvimento
- evite mocks, mas use quando necessário
Testes de Integração
- Teste entre as unidades
- Pegar casos com problemas mais genéricos
- Lembre-se da piramide, sempre
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6867023/unit-vs-integration.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6867025/2-unit-0-integration.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6867026/integration-tests.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6867027/unittest_faucet.gif)
Outros milhões de tipos de testes
- Acceptance tests
- Performance tests
- Smoking tests
- System tests
- Interface tests
- etc (do nivel framework JS)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6867038/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/6867052/1FYr.gif)
Boas Praticas
By Victor Perin
Boas Praticas
- 414