Entendo minha favorita arquitetura de APIs em node.js (FDA vs DDD vs VSA)
Contexto
- Sou dev web há 11 anos
- Nos últimos 6 especialista em frontend
- Venho utilizando o node.js para APIs nos últimos 4 anos
Isso quer dizer que não sou expert em construção de APIs
Introdução
Meu aprendizado com o node.js foi majoritariamente prático.
Fiz um curso na Udemy e depois disso sai fazendo API.
Neste ano eu comecei a me perguntar um pouco mais sobre a base teorica da arquitetura que aprendi a criar minhas APIs. O curso que fiz era bem voltado para a parte prática mesmo, fazer o negócio funcionar, e pronto. Isso foi ótimo na época.
Objetivo
Resolvi então entender qual base teorica de arquitetura eu vinha usando. Já criei ao menos umas 10 APIs utilizando:
Node.js + Express + MongoDB (e nas mais recentes o TypeScript)
Método
Basicamente perguntei ao co-pilot para ler minha API mais robusta até então e me dizer qual arquitetura eu vinha utilizando por todos esses anos
Resultado
Recebi três termos primários para definir a arquitetura do meu projeto:
1. Feature-Driven Architecture (FDA)
Eu tenho uma pasta modules com subpastas. Cada subpasta represente a totalidade de uma funcionalidade, contendo controller.ts, model.ts, routes.ts, types.ts, e etc.
E ai utilizo algumas pastas no mesmo nível de modules contendo código compartilhado entre esses módulos, como middlewares, config, langs ...
2. Domain-Driven Design (DDD) - Simplificado
A IA identificou fortes traços do DDD na minha arquitetura, pois cada módulo se relaciona ao um contexto de negócio.
Para realmente classificar como DDD, eu precisaria aplicar alguns padrões de orientação a objetos, como agregados e value object, e também uma camada de abstração repositório
Daqui eu tirei alguns pontos interessantes de estudo :)
3. Vertical Slice Architecture (VSA)
Pelo o que eu entendi, esse padrão seria essa divisão modular ainda mais estrtita e apropriada para aplicação de microserviços. Não se aplica ao meu caso.
Conclusão
FDA para mim é ótimo por sua simplicidade e facilidade em relacionar o código com o mundo real. Fácil de entender e organizar as coisas.
DDD seria a progressão natural para ampliar o potencial de escalar a API de uma maneira mais sólida. Eu já ouvi falar sobre o NestJS, que utilizaria uma abordagem mais baseada em classes, o que acredito que pode me ajudar. Um possível próximo de tópcio de estudos para mim.
VSA é uso de caso específico, para quando a API já estiver grande e com necessidade de crescer mais...ainda vou chegar lá
Me conta ai
Me fala sua experiência com alguma dessas arquiteturas e o que vale a pena aprender