/advanced-node

API em NodeJs usando Typescript, TDD, Clean Architecture, Design Patterns e SOLID principles

Primary LanguageTypeScriptGNU General Public License v3.0GPL-3.0

Build Status Coverage Status js-standard-style GPLv3 License Open Source

Advanced Node

alt text


Essa API faz parte do treinamento do professor Rodrigo Manguinho (Mango) na Udemy.

O objetivo do treinamento é mostrar como criar uma API com uma arquitetura bem definida e desacoplada, utilizando TDD (programação orientada a testes) como metodologia de trabalho, Clean Architecture para fazer a distribuição de responsabilidades em camadas, sempre seguindo os princípios do SOLID e, sempre que possível, aplicando Design Patterns para resolver alguns problemas comuns.

Princípios

  • Single Responsibility
  • Open Closed
  • Liskov Substitution
  • Interface Segregation
  • Dependency Inversion
  • Separation of Concerns
  • Don't Repeat Yourself
  • You Aren't Gonna Need It
  • Keep It Simple
  • Composition Over Inheritance
  • Small Commits

Design Patterns

  • Factory
  • Adapter
  • Composite
  • Decorator
  • Command
  • Dependency Injection
  • Abstract Server
  • Composition Root
  • Builder
  • Template Method
  • Singleton
  • Chain of Responsibility
  • Proxy

Code Smells (Anti-Patterns)

  • Data Clumps
  • Divergent Change
  • Duplicate Code
  • Inappropriate Intimacy
  • Feature Envy
  • Large Class
  • Long Method
  • Long Parameter List
  • Middle Man
  • Primitive Obsession
  • Refused Bequest
  • Shotgun Surgery
  • Speculative Generality

Metodologias e Designs

  • TDD
  • Clean Architecture
  • DDD
  • Refactoring
  • GitFlow
  • Modular Design
  • Dependency Diagrams
  • Use Cases
  • Spike (Agile)

Bibliotecas e Ferramentas

  • NPM
  • Typescript
  • Git
  • Jest
  • TypeORM
  • Axios
  • Postgres
  • JsonWebToken
  • Express
  • Supertest
  • Husky
  • Lint Staged
  • Eslint
  • Standard Javascript Style
  • Rimraf
  • In-Memory Postgres Server
  • Module-Alias
  • Npm Check

Features do Typescript

  • POO Avançado
  • Strict Mode
  • Interface
  • TypeAlias
  • Namespace
  • Utility Types
  • Modularização de Paths
  • Configurações
  • Build

Features de Testes

  • Testes Unitários
  • Testes de Integração
  • Cobertura de Testes
  • Test Doubles
  • Mocks
  • Stubs
  • Spies
  • Fakes