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.
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 ?
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.
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.
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
.
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.
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.
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.