Home | Escopo | Processo | Design/Mockups | Gerência | Estudos | Arquitetura | Contratos | BD | Qualidade | Configuração | Instalação | Instruções | Utilização | Analytics | Infraestrutura | Dicas |
---|
Arquitetura da Aplicação
Descrição
Nesta seção, detalhamos a arquitetura da aplicação, abordando as tecnologias utilizadas, o fluxo de deploy e a estrutura dos componentes. Além disso, descrevemos as metodologias de desenvolvimento adotadas, que visam garantir a qualidade e a eficiência no ciclo de vida do software.
Sumário
- Definição das Tecnologias
- Diagrama de Componentes
- Diagrama de Deploy
- Metodologias de Desenvolvimento
Definição das Tecnologias
Backend
- Linguagem: JavaScript + TypeScript
- Ambiente de execução: Node.js
- Framework para API: Nest.js
- Banco de dados: PostgreSQL
- Interface de persistência: Prisma ORM
- Documentação da API: Swagger
- Testes: Jest
- Containerização: Docker + Docker Compose
Frontend
- Linguagem: JavaScript + TypeScript
- Ambiente de execução: Node.js
- Framework: Next.js
- Estilização: Tailwind CSS
- Gerenciamento de requisições HTTP: Axios
- Testes: Jest
Diagrama de Componentes
O diagrama de componentes abaixo ilustra a estrutura principal da aplicação, evidenciando a interação entre os componentes do frontend e backend.
Frontend:
O frontend é composto por dois módulos principais:
- App: Representa as telas que compõem a interface do usuário, onde ocorrem as interações.
- Components: São partes reutilizáveis da interface, como botões e formulários, que podem ser incorporados em diferentes telas.
Backend:
No backend, seguindo o padrão modular do Nest.js, os subcomponentes são divididos de acordo com responsabilidades específicas, facilitando a escalabilidade e manutenção da aplicação. Estes módulos lidam com autenticação, comunicação com o banco de dados, lógica de negócios, entre outras funções críticas.
Diagrama de Deploy
O diagrama de deploy a seguir detalha o processo automatizado de entrega contínua da aplicação. Cada vez que um commit é enviado para a branch principal (Main), são acionadas várias etapas de verificação e validação, incluindo:
- Linting: Verificação de boas práticas e padrões de código.
- Testes Unitários: Execução de testes automatizados para garantir a integridade das funcionalidades.
- Deploy: Após as validações, o código é automaticamente enviado e implantado em instâncias da AWS.
Infraestrutura:
- Frontend e Backend: Ambos são executados dentro de containers no mesmo EC2, garantindo consistência e isolamento de ambiente.
- Banco de dados: O PostgreSQL também está em execução na AWS, comunicando-se diretamente com o backend para garantir a persistência dos dados.
Essa automação garante que as atualizações do código sejam rapidamente entregues ao ambiente de produção, assegurando que a aplicação esteja sempre com a versão mais recente disponível para os usuários.
Metodologias de Desenvolvimento
Backend - BDD e DDD
BDD (Behavior-Driven Development)
O BDD é uma metodologia que expande o TDD (Test-Driven Development) ao focar no comportamento do sistema do ponto de vista do usuário. Essa abordagem permite uma comunicação clara entre as partes interessadas e a equipe de desenvolvimento, utilizando uma linguagem comum, acessível para todos os envolvidos.
-
Formato típico: Os cenários em BDD seguem o formato "Dado que... Quando... Então...", onde:
- Dado que: Define o estado inicial do sistema.
- Quando: Descreve a ação do usuário.
- Então: Especifica o resultado esperado.
Isso garante que o software seja desenvolvido de acordo com os requisitos funcionais e focado nas necessidades reais dos usuários.
DDD (Domain-Driven Design)
O DDD foca na modelagem do domínio de negócios, estabelecendo uma linguagem comum entre os desenvolvedores e especialistas do domínio. A estrutura do software é baseada no entendimento profundo das regras e processos do negócio.
Principais conceitos do DDD:
- Entidades: Objetos com identidade única.
- Agregados: Conjuntos de entidades que formam uma unidade lógica.
- Serviços de Domínio: Funcionalidades que não pertencem diretamente a uma entidade.
- Repositórios: Interfaces que lidam com o armazenamento e recuperação de entidades.
- Value Objects: Objetos que são definidos apenas por seus atributos.
Essa metodologia permite que o software evolua de forma orgânica, acompanhando as mudanças no domínio de negócio.
Frontend - MVC
MVC (Model-View-Controller)
A arquitetura MVC separa a aplicação em três partes principais, facilitando o desenvolvimento e a manutenção do código:
- Model: Gerencia os dados e a lógica de negócios da aplicação. No frontend, isso pode incluir hooks, estados e manipulação de dados da API.
- View: Define a interface visual da aplicação, utilizando componentes React estilizados com Tailwind CSS para garantir uma experiência de usuário consistente e responsiva.
- Controller: Atua como intermediário, lidando com as interações do usuário e as respostas da API, implementado no Next.js através de rotas e controladores.
Essa abordagem garante uma clara separação de responsabilidades, tornando a aplicação mais modular e fácil de escalar.