Aluizio Developer

Curso de NodeJs Avançado com Clean Architecture, NestJS e Typescript

Projeto prático API Restful Nodejs, NestJS e Typescript, com testes automatizados, DDD, Clean Arch e Design Pattens.

O que você aprenderá?

  • Criar uma API REST em NodeJs com NestJS e Typescript
  • Aplicar Design Patterns em projetos NodeJs com Typescript
  • Criar testes automatizados em todas as camadas da aplicação
  • Usar recursos avançados do Typescript como Interface e Generics
  • Aplicar Clean Architecture e DDD em uma API criada com NestJS
  • Gerar documentação de API NestJS com Swagger

Acesse agora a Pagina do Curso no portal Udemy.

Descrição do Curso

Criação de projeto prático direto ao ponto, exemplificando uma API Restful com Node.js, NestJS e Typescript, orientado à testes automatizados (unitários, de integração e ponta a ponta), aplicando conceitos de Domain Driven Design (DDD), Clean Architecture, Design Patterns e princípios SOLID.

Neste curso nao teremos explicação do zero sobre as tecnologias abordadas, o foco aqui é criar um projeto prático aplicando alguns conceitos do DDD, Clean Architecture e Testes Automatizados desde o inicio do projeto.

O objetivo deste curso é aprofundar na aplicação prática de todas essas tecnologias e metodologias citadas, seguindo as melhores práticas do mercado. Também serão abordados assuntos como princípios SOLID, design patterns e clean code.

O projeto desenvolvido no curso será composto por um módulo de usuários com: entidade, validação dos dados, repositórios, casos de usos, funcionalidades de um CRUD, paginação dos dados retornados em lista, autenticação com JWT, tudo desenvolvido acompanhado de testes automatizados, dentro de uma arquitetura baseada em conceitos de DDD e Clean Architecture.

O Framework NestJS ficará encarregado pelas funcionalidades da camada de infraestrutura. Serão inúmeros recursos do NestJS que usaremos para aumentar a produtividade, incluindo a criação de rotas, middlewares, controllers, interceptors, exception filters, guards, documentação, etc.

Com relação aos recursos para manipulação dos dados da aplicação, usaremos o Prisma, que é um ORM (Object Relational Mapper) de código aberto que simplifica drasticamente a modelagem de dados, migrações e acesso a dados em bancos de dados SQL e NoSql.

O curso inclui ainda:

  • Instruções de configuração de ambiente de desenvolvimento.
  • Projeto prático com um módulo de usuários.
  • Testes Automatizados: unitários, de integração e ponta a ponta.
  • Tratamento de erros e exceções.
  • Consultas avançadas com Prisma ORM.

Este curso é para você, se:

  • Você deseja implementar APIs Restful seguindo práticas do mercado.
  • Você gosta de aprender com a prática criando um projeto direto ao ponto.

Este curso não é para você, se:

  • Você é iniciante em programação.
  • Você nunca trabalhou com Javascript, Nodejs ou banco de dados relacional.

Tecnologias usadas e que precisarão estar instaladas no PC de cada aluno:

  • Node.js versao 18 ou superior.
  • Docker.
  • VS Code ou similar.
  • Insomnia ou similar.
  • CLI do NestJS.
  • CLI do Prisma ORM.

Regras de negócio (RN)

  • Os campos name, email e password serão de preenchimento obrigatório.
  • O campo createdAt será de preenchimento opcional.
  • O usuário não deve poder se cadastrar com e-mail duplicado.

Requisitos funcionais (RF)

  • Deve ser possível se cadastrar.
  • Deve ser possível se autenticar.
  • Deve ser possível exibir os dados de um usuário.
  • Deve ser possível listar todos os usuários.
  • Deve ser possível atualizar o nome de um usuário.
  • Deve ser possível atualizar a senha de um usuário.
  • Deve ser possível excluir um usuário.

Requisitos não-funcionais (RNF)

  • A senha do usuário precisa estar criptografada.
  • Os dados da aplicação precisam estar persistidos em um banco de dados Postgres.
  • Todas as listas de dados precisam estar paginadas com 15 itens por página.
  • O usuário deve ser identificado por um JWT (JSON Web Token).

Livros indicados como material de apoio

Arquitetura Limpa:

  • Titulo: O guia do artesao para estrutura e design de software
  • Autor: Robert C. Martin
  • Livro bem mais prático, abordando os conceitos de SOLID, arquitetura limpa, orientacao ao objeto, exemplos de como criar classes, etc.

Red book Domain-Driven Design:

  • Titulo: Implementando Domain-Driven Design
  • Autor: Vaughn Vernon
  • Usa a linguagem Java para mostrar na prática como aplicar o DDD em softwares, apesar de ter bastante teoria também.

Blue book Domain-Driven Design:

  • Titulo: Atacando as complexidades no coracao do software
  • Autor: Eric Evans
  • Esse livro é praticamente todo teorico, que aborda toda a metodologia de DDD que pode ser aplicada em um software. Não espere encontrar aqui projetos práticos ou exemplos completos em uma linguagem de programacao.

The Clean Code Blog:

https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

https://vaughnvernon.com

https://martinfowler.com

http://cleancoder.com/products

O papel do arquiteto de software

Apesar de nem todas as organizações possuírem o cargo de arquiteto de software, normalmente profissionais mais experientes, como desenvolvedores seniors e tech leads, acabam realizando esse papel baseado em suas experiências anteriores.

O principal papel que essa pessoa pode assumir é a função de transformar requisitos de negócios em padrões arquitetônicos. Ou seja, ela vai pensar em como atender a alguns requisitos da empresa, os transformando em uma solução.

Esse arquiteto de software é um desenvolvedor e, em seu dia a dia, pode orquestrar o fluxo de comunicação entre pessoas desenvolvedoras e experts de domínio. A necessidade de ter um expert de domínio trabalhando junto com o desenvolvedor surge por existir, normalmente, uma dificuldade em alinhar o que vai ser desenvolvido com o que o cliente precisa.

Esse expert é uma pessoa que sabe da necessidade da organização, ou na maioria das vezes é a pessoa que vai utilizar o software no dia a dia.

Pilares da arquitetura de software

  • Organização: organizar um sistema para que possamos atender os objetivos de negócio gerando um produto para o cliente final.
  • Estruturação: criar um software de qualidade e que consiga evoluir com o passar do tempo.
  • Componentização: componentização dos processos para que eles operem com eficácia, evitando o retrabalho.
  • Relacionamento entre sistemas: preparar seus componentes para que esses consigam se integrar de maneira eficiente dentro de um processo maior.
  • Governança: A governança busca a garantia de que o software continue funcionando independente de equipe.

Clean Architecture, DDD e SOLID. Por quê?

As empresas estao usando essas metodologias que garantem softwares com estruturas robustas, com maiores facilidades para manutenções, custos menores, além de várias outras vantagens. O software precisa agregar valor ao negócio para que seja válida sua existencia.

Comentários