ORMs em Node.js: o Buraco que Parece Raso, mas Engole Projetos Inteiros

Onde Começa a Fumaça: O Custo Invisível dos ORMs

Todo dev já caiu nessa: instala um ORM achando que vai ganhar “velocidade” e “produtividade”. Uma semana depois, está lutando com migrations quebradas, consultas que parecem poesia concretista e um acoplamento tão forte que o domínio vira refém do modelo relacional.

É assim que nasce a dívida técnica mais sorrateira do Node.js moderno.

Os tópicos mais discutidos nas comunidades reforçam isso: TypeORM que quebra ao migrar, Prisma gerando SQL gordo, ORMs que tentam ser tudo ao mesmo tempo (camada de dados, validação, DSL e gerador de schema). E cada mágica inserida ali significa uma coisa: você perde o controle direto daquilo que realmente importa — o SQL executado.

O Caminho Sênior: Query Builder Enxuto + Controle Total

Quer evitar over-engineering? Pare de delegar lógica para frameworks que tentam “entender o seu domínio” melhor que você. A saída pragmática é usar ferramentas minimalistas como Kysely ou Drizzle no modo “query builder puro”.

Você controla o SQL. Você controla o custo. Você controla o impacto no negócio.

Sem proxies mágicos, sem decorators que escondem o que está acontecendo, sem migrations que se auto-inventam.

Implementação de Senior na Prática

Aqui está um exemplo real usando Kysely — nada de firula, nada de abstração gourmet:

import { Kysely, PostgresDialect } from 'kysely'
import { Pool } from 'pg'

interface DB {
  users: {
    id: number
    name: string
    email: string
  }
}

const db = new Kysely<DB>({
  dialect: new PostgresDialect({
    pool: new Pool({
      connectionString: process.env.DATABASE_URL
    })
  })
})

// Consulta previsível, explícita
const users = await db
  .selectFrom('users')
  .select(['id', 'name', 'email'])
  .where('email', '=', 'teste@acme.com')
  .execute()

Simples. Rastreável. Fácil de revisar. E o SQL gerado você enxerga — não precisa torcer para que o ORM não invente moda.

O Preço da Escolha: ORMs vs Query Builders

Se você insiste em usar um ORM, aceite os custos:

  • Migrations que quebram porque o framework não acompanha sua modelagem.
  • Consultas que você não controla e que explodem a conta do Postgres.
  • Um acoplamento estrutural que te impede de evoluir o domínio sem reescrever metade da camada de dados.

Se você usa query builder:

  • Mais responsabilidade? Sim. Mas mais previsibilidade também.
  • Menos mágica? Sim. Mas menos dor também.
  • SQL explícito? Obrigatório. E isso é uma vantagem.

Direto das Trincheiras

  • Evite ORMs quando o negócio tem regras complexas: eles vão se tornar o gargalo das features.
  • Monitore o SQL gerado: se você não consegue explicá-lo em 20 segundos, tem algo errado.
  • Mantenha migrations sob seu controle: automatização demais cria inconsistências que cobram juros altos.

Fontes

Qual o melhor ORM para PostgreSQL em Node.js? : r/node, nodebestpractices/README.brazilian-portuguese.md, Qual ORM você usa em produção? : r/node, Migrar ou não migrar – o TypeORM está realmente morrendo? : r/node

Obrigado por acompanhar essa reflexão até o fim!

Espero que esses pontos ajudem você a tomar decisões mais lúcidas no seu próximo projeto. Não deixe de conferir outros artigos aqui no blog, onde descascamos outros hypes da nossa área.

Valeu e até a próxima! 😉

Facebook
Twitter
LinkedIn
Profissionalismo em Tecnologia

A Obsessão por Microserviços Está Criando Monólitos na Cabeça de Muita Gente

Microserviços viraram religião. E, como toda religião mal interpretada, criou fanático achando que qualquer API com três rotas já merece dez serviços, quatro filas e um diagrama que parece um ninho de marimbondo. Neste artigo, falo direto da trincheira: quando microserviços viram over‑engineering, como isso destrói produtividade e por que a obsessão pelo hype cria monólitos mentais — mesmo quando o código está “distribuído”. Sem firula, só pragmatismo.

Métodos Ágeis

Kubernetes Está Virando Peso Morto Para Aplicações Que Precisam Ser Ágeis

Kubernetes virou sinônimo de “arquitetura moderna”, mas para novas aplicações que precisam entregar valor rápido, ele tem sido mais âncora do que propulsor. O excesso de camadas, YAML infinito e carga operacional transformam algo simples em uma caricatura de complexidade. Aqui eu explico, sem floreio, por que muitos times estão usando Kubernetes como muleta arquitetural — e como evitar cair nessa armadilha que só aumenta dívida técnica e mata agilidade.

Inteligência Artificial

Escalabilidade: O Engano da Resiliência em Microserviços com Kafka

Muita gente veste Kafka como se fosse armadura de resiliência e escalabilidade. Mas quando o contexto de negócio não pede, o hype vira dívida técnica. Aqui eu bato direto no ponto: microserviços não ficam magicamente resilientes só porque você jogou um Kafka no meio. Vamos destrinchar onde o dev se queima, quando Kafka realmente resolve e quando ele só adiciona latência, custos e uma bela dor de cabeça operacional.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *