Sumário do Conteúdo
- O que é Prisma e por que ele se integra bem à arquitetura hexagonal
- Vantagens de usar Prisma em uma arquitetura hexagonal
- Benefícios resumidos
- Como estruturar o projeto: camadas e responsabilidades
- Exemplo simples de camada de domínio
- Configuração prática: do schema às rotas
- Considerações finais e boas práticas
Prisma com base hexagonal combina as vantagens do ORM Prisma com a arquitetura flexível e testável da arquitetura hexagonal, permitindo que você construa aplicações robustas, focadas no domínio e facilmente adaptáveis às mudanças.
O que é Prisma e por que ele se integra bem à arquitetura hexagonal
Prisma é uma ferramenta poderosa e moderna para acesso a dados que oferece um ORM tipado, intuitivo e seguro, alinhado com as práticas de TypeScript e JavaScript. Ao invés de trabalhar com query strings brutas ou abstrações pesadas, o Prisma permite que você defina seu modelo de dados de forma declarativa, gerando automaticamente um cliente forte e tipado para interagir com o banco de dados.
Quando falamos em prisma com base hexagonal, estamos buscando exatamente essa ponte: usar o Prisma como uma ferramenta de acesso a dados que pode ser facilmente integrada à camada de domínio central da arquitetura hexagonal. Essa combinação oferece benefícios como tipagem segura desde o banco até a aplicação, prevenção de bugs em tempo de compilação e uma camada de acesso a dados previsível, que pode ser facilmente substituída ou adaptada sem impactar o núcleo da aplicação.
A arquitetura hexagonal, por sua vez, prioriza a independência do framework e tecnologias externas, colocando o domínio no centro. Nesse contexto, o Prisma atua como um adaptador na camada externa, responsável apenas por traduzir as necessidades do domínio em operações no banco de dados, cumprindo perfeitamente o papel de "primary port" ou "adapter" conforme a necessidade.
Vantagens de usar Prisma em uma arquitetura hexagonal
A principal vantagem de adotar prisma com base hexagonal está na clareza e na separação de responsabilidades. Cada camada da arquitetura tem um papel bem definido: o domínio contém a lógica de negócio e as regras de cálculo, enquanto o Prisma cuida exclusivamente de como persistir e recuperar dados de forma eficiente.
Outro benefício crucial é a testabilidade. Com o Prisma configurado como um adapter ou um gateway de acesso a dados, é possível criar mocks ou utilizar o Prisma em memória em seus testes unitários, isolando completamente o domínio de qualquer preocupação com infraestrutura. Isso significa que seus testes de regra de negócio não dependem de um banco de dados real, tornando-os mais rápidos, previsíveis e fáceis de manter.
Além disso, o fluxo de trabalho do Prisma com seu schema `.prisma` e migrations permite que mudanças no modelo de dados sejam versionadas e propagadas de forma controlada. Em um contexto hexagonal, isso se alinha perfeitamente, pois as alterações no acesso a dados podem ser tratadas como adaptações pontuais sem tocar no núcleo da aplicação, respeitando o princípio da inversão de dependências.
Benefícios resumidos
- Tipagem segura: elimina erros de digitação e inconsistências entre layers.
- Testabilidade: facilite a substituição do Prisma por test doubles em testes de domínio.
- Manutenibilidade: mudanças no acesso a dados ficam isoladas e previsíveis.
- Produtividade: aproveite o poderoso gerador de consultas e o autocomplete do Prisma.
Como estruturar o projeto: camadas e responsabilidades
Em um projeto que adota prisma com base hexagonal, a estrutura geralmente organiza as camadas da seguinte forma: a pasta `domain` ou `core` contém as entidades de domínio, regras de negócio e ports (interfaces). Já a pasta `infra` ou `data` abriga os adaptadores, incluindo a implementação que utiliza o Prisma para acessar o banco de dados.
Basicamente, você define no seu schema do Prisma as tabelas e colunas que persistirão as entidades do domínio. Em seguida, cria repositories ou gateways que implementam as interfaces definidas no domínio, utilizando o Prisma Client para executar as operações de CRUD. Esses repositories então são injetados nas use cases ou services que contêm a lógica de negócio, mantendo o domínio puro e orientado a regras.
Essa separação permite que você troque o Prisma por outra ferramenta de acesso a dados no futuro, desde que a interface (port) permaneça a mesma. O domínio não precisa ser tocado, pois ele não depende da implementação específica do Prisma, apenas da abstração que a camada de infraestrutura fornece.
Exemplo simples de camada de domínio
Suponha uma entidade `User` definida no domínio:
- Domain: `src/domain/entities/user.ts` — apenas propriedades e métodos que representam a regra de negócio.
- Port (interface): `src/domain/ports/user-repository.port.ts` — define métodos como `create`, `findById`, `update`.
- Adapter (Prisma): `src/infra/repositories/prisma-user-repository.ts` — implementa a interface usando o Prisma Client para interagir com o banco.
Dessa forma, o fluxo fica claro: a aplicação (use case) solicita ao repositório definido pela port, sem saber se está usando Prisma, TypeORM ou até um mock. O prisma com base hexagonal funciona justamente como um facilitador dentro desse padrão, garantindo que a camada de acesso a dados seja robusta e desacoplada.
Configuração prática: do schema às rotas
Para colocar prisma com base hexagonal em prática, o primeiro passo é configurar seu schema.prisma com as entidades que representam seu modelo de dados. Defina tabelas que correspondam às entidades do domínio, mantendo nomes claros e alinhados com a linguagem do problema, mas lembre-se de que o schema do Prisma é uma preocupação de infraestrutura, não de domínio.
No lado da aplicação, crie as interfaces de portas no domínio e implemente adaptadores que utilizem Prisma Client. Esses adaptadores devem ser injetados nas camadas de aplicação, permitindo que a lógica de caso de uso permaneça focada em regras de negócio, sem se preocupar com detalhes de conexão, transação ou migração — esses tópicos ficam por conta do Prisma e da camada de infraestrutura.
Se você estiver trabalhando com uma API, por exemplo, as rotas ou controladores receberão as use cases, que por sua vez dependem das interfaces de repositório. O adaptador com Prisma será injetado nesses repositórios, proporcionando uma cadeia de dependências limpa e testável, que reforça a essência da arquitetura hexagonal com Prisma.
Vídeos Relacionados

Geometria Espacial: Volume de um prisma de base hexagonal
Aula ministrada pelo professor Ítalo Benfica. Natal/RN Siga o Instagram https://www.instagram.com/matematicanopapel/ ...
Considerações finais e boas práticas
Adotar prisma com base hexagonal exige um planejamento inicial, mas traz uma séria de benefícios a longo prazo, especialmente em projetos que precisam de manutenção constante, escalabilidade e testes automatizados. É fundamental evitar vazar conceitos do Prisma para o domínio, como tipos gerados automaticamente ou métodos específicos do client, mantendo a camada de domínio independente e focada apenas nas regras de negócio.
Utilize o Prisma apenas como uma ferramenta poderosa na camada de adaptação, aproveitando sua tipagem, autocompletar e recursos de migration, mas respeitando os limites da arquitetura hexagonal. Com essa abordagem, sua aplicação se tornará mais modular, testável e preparada para evoluções, seja trocando de banco de dados, seja adicionando novas regras de negócio sem impactar a infraestrutura subjacente.
Em resumo, prisma com base hexagonal é uma estratégia inteligente para construir aplicações JavaScript/TypeScript robustas, seguras e fáceis de evoluir, unindo a simplicidade do Prisma à clareza organizacional da arquitetura hexagonal.