Projeto exemplificando a construção de uma API RESTful que se baseia em uma lista de tarefas com Node.js, utilizando princípios de Clean Architecture, Arquitetura Evolutiva e TDD, integrando a maleabilidade do Express com a modularidade do NestJS.
A Arquitetura Limpa, proposta por Robert C. Martin (conhecido como Uncle Bob), é uma abordagem para o design de software que visa criar sistemas modulares, altamente testáveis e de fácil manutenção. Essa arquitetura organiza o código em camadas que separam as responsabilidades e isolam as dependências, garantindo que a lógica de negócio não seja afetada por detalhes de implementação como frameworks ou bancos de dados.
- Independência de frameworks: O código da aplicação não deve ser dependente de frameworks específicos, permitindo que eles sejam substituídos sem grandes impactos.
- Testabilidade: A lógica de negócio deve ser testável de forma independente de detalhes externos como interfaces de usuário ou sistemas de banco de dados.
- Independência de UI: A interface do usuário (UI) pode ser alterada sem afetar a lógica central do sistema.
- Independência de banco de dados: Mudanças no banco de dados ou a troca de tecnologias de armazenamento não devem impactar a lógica de negócio.
- Independência de agentes externos: Sistemas e serviços externos podem ser modificados ou substituídos sem afetar a aplicação. A estrutura típica de uma Arquitetura Limpa envolve camadas como entidades, casos de uso, adaptadores, e frameworks, organizadas em torno de um núcleo de regras de negócio que permanece isolado de detalhes técnicos.
A Arquitetura Evolutiva é uma abordagem que prioriza a capacidade de um sistema de software para adaptar-se a mudanças ao longo do tempo, de maneira contínua e incremental. Em vez de projetar um sistema rígido desde o início, a Arquitetura Evolutiva aceita que os requisitos e as tecnologias irão mudar e, portanto, o sistema deve ser capaz de evoluir para atender a essas novas demandas.
- Facilidade de mudança: O sistema é construído para suportar mudanças, permitindo que novos requisitos sejam implementados sem grandes reescritas.
- Testes contínuos: Automação de testes e integração contínua são fundamentais para garantir que as mudanças não introduzam regressões.
- Feedback constante: O processo de desenvolvimento é iterativo e incremental, permitindo que o feedback dos usuários e do mercado seja incorporado rapidamente ao sistema.
- Decisões arquiteturais reversíveis: As decisões arquiteturais são tomadas de forma que possam ser alteradas ou ajustadas à medida que o sistema evolui.
A Arquitetura Evolutiva é especialmente útil em ambientes ágeis, onde a capacidade de responder rapidamente a mudanças é crucial para o sucesso do projeto.
- Clone o repositório
https://github.com/Guilherme-07062002/evolutionary-clean-architecture-sample
- Instale as dependências
yarn
- Inicie o servidor
yarn dev
- Acesse a API em:
http://localhost:3000
- E para rodar os testes:
yarn test