8 min

Introdução à arquitetura Vertical Slice, organizando seu código de forma modular e escalável

Avatar image
Gregory Serrao
Você já se sentiu perdido em meio a pastas e arquivos intermináveis em um projeto de software? A arquitetura Vertical Slice pode ser a solução que você precisa. Neste artigo, vamos explorar como essa abordagem pode ajudar a estruturar suas aplicações de forma mais modular, escalável e fácil de manter.

Você já se sentiu perdido em meio a pastas e arquivos intermináveis em um projeto de software? A arquitetura Vertical Slice pode ser a solução que você precisa. Neste artigo, vamos explorar como essa abordagem pode ajudar a estruturar suas aplicações de forma mais modular, escalável e fácil de manter.

Se você já trabalhou em projetos de software um pouco maiores, sabe como a organização do código pode se tornar um desafio com o tempo. No início, tudo parece bem estruturado: pastas organizadas, classes separadas e aquela sensação de controle total. Mas, conforme novas funcionalidades são adicionadas, o código vai ficando mais complexo e difícil de manter.


Esse problema é comum em projetos que seguem a arquitetura em camadas (ou layered architecture), onde o código é organizado em pastas como controllers, services e repositories. Embora essa abordagem funcione bem no começo, ela pode se tornar um pesadelo à medida que o projeto cresce.


O Problema da Arquitetura em Camadas (Layered Architecture)

Imagine que estamos construindo um sistema de usuários onde precisamos das seguintes funcionalidades:

  1. Criar um novo usuário
  2. Buscar um usuário pelo ID
  3. Atualizar as informações de um usuário


Na arquitetura em camadas, a estrutura do projeto ficaria mais ou menos assim:

No início, isso parece organizado. Mas e se o projeto crescer? Conforme novas funcionalidades são adicionadas, os arquivos começam a ficar grandes e cheios de responsabilidades misturadas.

Conforme novas funcionalidades são adicionadas, os arquivos começam a ficar grandes e cheios de responsabilidades misturadas. Manter o código organizado se torna um desafio, e a complexidade aumenta rapidamente.


Outro problema é que, para entender uma funcionalidade específica, você precisa navegar entre várias camadas do sistema. Por exemplo, para entender como um usuário é cadastrado, você teria que:

  1. Olhar o controller para ver como a requisição HTTP é tratada.
  2. Abrir o service para entender as regras de negócio.
  3. Ir até o repository para ver como os dados são salvos no banco.

Isso pode parecer simples em projetos pequenos, mas em sistemas maiores, a complexidade cresce, e fica cada vez mais difícil modificar o código sem quebrar algo.


Vertical Slice pode ser a solução

A arquitetura Vertical Slice propõe uma abordagem diferente: em vez de organizar o código por camadas técnicas, organizamos por funcionalidades. Cada funcionalidade é uma "fatia" (slice) independente, com tudo o que ela precisa dentro de uma única pasta.


Em vez de ter um grande diretório de controllers, outro de services e outro de repositories, organizamos nosso código de forma que cada funcionalidade tenha tudo que precisa dentro de uma única pasta.


No nosso exemplo de CRUD de usuários, em vez de espalhar o código entre controllers/, services/ e repositories/, a estrutura ficaria assim:

💡 Pense assim: Em vez de organizar o código por tipo de arquivo, organizamos por caso de uso.

Benefícios da arquitetura Vertical Slice

Agora que você entende a diferença, vamos falar sobre as vantagens dessa abordagem:


Código mais modular e organizado

Cada funcionalidade tem seus próprios arquivos, o que facilita muito a manutenção e evita aquela confusão de arquivos gigantes com responsabilidades misturadas.


Facilidade para encontrar e modificar funcionalidades

Se alguém quiser entender como um usuário é criado, basta olhar na pasta features/createUser/, e lá estarão todos os arquivos necessários para essa funcionalidade.


Redução do acoplamento

Como cada "slice" funciona de forma independente, podemos modificar um caso de uso sem afetar outros, tornando o código mais flexível e seguro.


Testes mais fáceis

Cada funcionalidade pode ser testada de forma isolada, sem precisar simular toda a estrutura do projeto, o que torna os testes mais simples e eficientes.


Melhor escalabilidade

Se precisarmos adicionar novas funcionalidades no futuro, basta criar uma nova pasta dentro de features/, sem precisar modificar arquivos já existentes. Isso torna o projeto muito mais escalável e organizado.


Lembre-se: Não existe bala de prata

Embora a arquitetura Vertical Slice ofereça muitas vantagens, é importante lembrar que não existe uma solução única para todos os problemas. Cada projeto tem suas particularidades, e o que funciona bem em um contexto pode não ser ideal em outro.


A Vertical Slice é especialmente útil em projetos onde a modularidade e a facilidade de manutenção são prioridades. No entanto, em cenários onde a performance extrema ou a integração com sistemas legados é crítica, outras abordagens podem ser mais adequadas.

💡 Antes de adotar qualquer arquitetura, avalie as necessidades do seu projeto, a equipe envolvida e os recursos disponíveis. A melhor arquitetura é aquela que se adapta ao seu contexto.

Mas como isso funciona no mundo real?

Se você quer ver essa arquitetura em ação, preparei um vídeo completo onde criamos um CRUD do zero usando TypeScript, Express e Drizzle, seguindo a abordagem Vertical Slice. O vídeo é sem cortes, para que você possa acompanhar cada detalhe da implementação. Confira abaixo!


Conclusão

A arquitetura Vertical Slice é uma abordagem poderosa para projetos que precisam de modularidade, escalabilidade e facilidade de manutenção. Ela resolve muitos dos problemas comuns da arquitetura em camadas, especialmente em projetos maiores.


Se você está cansado de lidar com código bagunçado e difícil de manter, experimente a Vertical Slice no seu próximo projeto. E se quiser ver um exemplo prático, não deixe de conferir o vídeo que preparei. Aproveite para compartilhar suas dúvidas ou experiências nos comentários!



Cadastre-se para novos posts