Skip to content

Instantly share code, notes, and snippets.

@mandado
Last active April 24, 2024 14:07
Show Gist options
  • Save mandado/c487b685c877ac5197d13d21ecc2839e to your computer and use it in GitHub Desktop.
Save mandado/c487b685c877ac5197d13d21ecc2839e to your computer and use it in GitHub Desktop.

Estilo de Codificação e Organização de Arquitetura Base para Projetos Node + TypeScript (Airbnb Style)

Este documento define um estilo de codificação e organização de arquitetura base para projetos Node.js e TypeScript que utilizam as melhores práticas de desenvolvimento. O objetivo é fornecer um conjunto de diretrizes para garantir a consistência, legibilidade, manutenabilidade e escalabilidade do código. Este estilo de codificação é baseado no Airbnb Style Guide, com algumas adaptações para melhor se adequar às necessidades de projetos Node + TypeScript.

Estrutura do Projeto ( Rascunho )

a ideia aqui é definir um padrão, hoje quando usamos api serverless estamos começando a usar esse boilerplate que está em uma estrutura diferente. https://github.com/tem-saude/tem-serverless-boilerplate

e quando vamos para fargate usamos nest como base, mas sem uma estrutura definida.

A questão aqui é usaremos algo no estilo do boilerplate, algo no estilo do Nest ou definiremos nossa estrutura de pastas ?

Camadas de Arquitetura

A aplicação deve ser estruturada em camadas de arquitetura, como:

  • Camada de Apresentação: Responsável pela interação com o usuário, como controllers, DTOs e interfaces.
  • Camada de Aplicação: Contém a lógica de negócio da aplicação, como serviços e regras de negócio.
  • Camada de Domínio: Contém os modelos de domínio da aplicação, como entidades, agregados e interfaces.
  • Camada de Infraestrutura: Contém a implementação dos detalhes técnicos da aplicação, como repositórios, adaptadores e drivers.

Módulos

Cada módulo deve ser uma unidade de código coesa e reutilizável. Os módulos devem ter as seguintes características:

  • Tamanho: Os módulos devem ter um tamanho razoável, geralmente entre 50 e 200 linhas de código.
  • Responsabilidade única: Cada módulo deve ter uma única responsabilidade bem definida.
  • Coesão: O código dentro de um módulo deve ser fortemente coeso, com alta interdependência entre os elementos do módulo.
  • Reutilização: Os módulos devem ser projetados para serem reutilizados em diferentes partes do aplicativo.

Padrões de Codificação

O código deve seguir os padrões de codificação do Airbnb Style Guide, com as seguintes exceções:

  • Interfaces: As interfaces devem usar o recurso interface do typescript, um bom uso para interface é quando precisa de contrato entre classes de serviços por exemplo.
  • Tipos: Os tipos personalizados devem usar recurso type do typescript. um bom uso para tipo é quando precisa de um tipo para resposta, parametros e etc.
  • Enums: As constantes de enum devem usar o recurso Enum do typescript.
  • Funções: As funções devem usar o estilo camelCase.
  • Variáveis: As variáveis devem usar o estilo camelCase.
  • Constantes: As constantes devem usar o estilo SNAKE_CASE.

Teste Unitário

Todo o código deve ser testado unitariamente com cobertura de teste de pelo menos 80% ( A Definir ). Os testes unitários devem ser escritos usando o framework Vitest.

Ferramentas

As seguintes ferramentas devem ser utilizadas no projeto:

  • Node.js: Versão LTS
  • TypeScript: Versão mais recente
  • ESLint: Com a configuração airbnb-typescript
  • Prettier: Com a configuração padrão
  • Vitest: Versão mais recente
  • Editorconfig padronização entre editores.

Conclusão

Este documento fornece um guia básico para a codificação e organização de projetos Node + TypeScript. Seguindo estas diretrizes, você pode garantir que seu código seja consistente, legível, manutenível e escalável.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment