Extras
Arquitetura do Projeto
Estrutura do Projeto
O projeto segue uma arquitetura modular e organizada, separando claramente as responsabilidades de cada parte do sistema. Abaixo está uma descrição detalhada de cada diretório e seu propósito:
📂 /src/..Module.ts
Este arquivo é o ponto central de injeção de dependências no projeto. Ele gerencia todas as classes e serviços que são importados e instanciados. Aqui, você configura como as diferentes partes da aplicação se conectam, promovendo a modularidade e facilitando a manutenção e testes do código.
📂 /src/applications
Nesta pasta, estão os controladores e eventos de opt-in, que lidam diretamente com as requisições e respostas da aplicação. Os controladores validam os dados recebidos e garantem que as entradas estejam corretas antes de passá-las para a camada de negócios. Eles atuam como uma interface entre o mundo externo (interfaces de usuário, APIs) e os serviços internos. Toda a lógica de entrada e saída passa por aqui.
📂 /src/domain
O diretório domain
contém as interfaces que representam o domínio do projeto. Elas definem os contratos de dados e regras que estruturam a lógica central do sistema, servindo como uma camada de abstração que mantém o sistema desacoplado. Isso garante que a lógica de negócios não dependa de implementações específicas, como frameworks ou bibliotecas externas.
📂 /src/usecases
Esta é a camada que implementa as regras de negócio. Aqui estão os casos de uso, como criar, deletar, atualizar e buscar por ID, além de realizar cálculos e processamentos específicos do sistema. Cada caso de uso implementa uma lógica de negócios específica, garantindo que o sistema funcione de acordo com as expectativas do domínio.
📂 /src/infrastructures
A infraestrutura é responsável por tudo o que envolve comunicação externa. Isso inclui APIs, bancos de dados, serviços de pagamento, entre outros. Esta camada faz a ponte entre o sistema e os recursos externos, abstraindo a complexidade da comunicação externa e garantindo que as regras de negócio sejam mantidas independentemente da tecnologia usada para integrar serviços.
📂 /src/utils
Este diretório contém funções utilitárias, classes e módulos que podem ser reutilizados em várias partes do projeto. A ideia aqui é promover a reutilização de código e facilitar a manutenção, armazenando funções auxiliares e métodos que não pertencem diretamente às regras de negócio, mas são necessários para o funcionamento eficiente do sistema.
📂 /src/config
A pasta de configuração é usada para gerenciar as variáveis de ambiente e configurações específicas do projeto, como chaves de API, URLs de bancos de dados, e outras configurações que variam de acordo com o ambiente (desenvolvimento, produção, etc.). Isso facilita a troca de configurações sem alterar o código, apenas ajustando as variáveis necessárias para cada ambiente.
Essa arquitetura promove a separação de responsabilidades, mantendo cada camada do sistema focada em um propósito específico. Além disso, facilita a escalabilidade, manutenção, e testes do projeto, permitindo que cada parte seja desenvolvida e alterada de forma independente.