O conceito de entidade na prática
o que é uma entidade é uma das perguntas que mais gera confusão quando se começa a modelar sistemas. No fundo, uma entidade é qualquer coisa que você decide representar como unidade distinta dentro do seu domínio. Pode ser um cliente, uma transação, um dispositivo IoT, um pedido. O importante não é a classe gramatical, mas a fronteira que você desenha entre o que é relevante e o que é ruído.
A diferença entre entity e value object que ninguém te conta
Na maioria dos projetos que eu vejo, as pessoas criam entidades onde deveriam usar value objects, ou vice-versa. A regra prática é simples: se a identidade importa, é entity. Se o valor importa, é value object. Na prática, isso define como você vai lidar com mutabilidade, comparação e persistência. Eu tive um problema concreto em um sistema de estoque onde criamos uma entidade Produto com ID, nome, preço e categoria. O preço era tratado como parte da entidade, o que gerava inconsistências quando o mesmo produto tinha preços diferentes em períodos distintos. A solução foi transformar preço em value object atrelado a uma entidade PreçoProduto, com data de vigência. Isso reduziu bugs relacionados a atualização de preço em cerca de 40% no primeiro trimestre pós-migração.
Entidades distribuídas e a ilusão do ID único
Quando você sai do domínio mono e vai para sistemas distribuídos, a noção de entidade ganha camadas extras de complexidade. Um UUID gerado localmente pode colidir com outro UUID gerado em outro service. É por isso que padrões como ULID ou Snowflake existem. Não é sobre estética, é sobre garantir que a identidade permaneça única sem depender de um coordenador central. O timing de sincronização também é um problema real. Em microserviços, duas instâncias podem criar entidades com o mesmo identificador lógico porque não há consenso imediato. A workaround que funcionou pra mim foi usar o padrão de sequenciamento baseado em evento: criar a entidade com um ID provisório, publicar o evento de criação, e só depois resolver para o ID definitivo após confirmação. Isso aumenta a latência inicial em cerca de 50ms, mas elimina colisões na prática.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Quando uma entidade deixa de fazer sentido
Nem tudo que parece uma entidade é uma entidade. Dados temporários, resultados computacionais, estados transitórios — tudo isso pode ser tentadoramente modelado como entidade, mas gera de modelagem. Um exemplo comum é criar uma entidade ParaCadaStatusDoPedido quando o status poderia ser apenas um campo com enumeração. A diferença aparece quando você precisa fazer query por status: com entidade extra, você une tabelas; com enumeração, você filtra direto. O custo de manutenção também é fator decisivo. Cada entidade adiciona um ponto de falha potencial: migration, validação, serialização, cache invalidation. Se a entidade não carrega um comportamento significativo ou não precisa de identidade própria ao longo do tempo, provavelmente é value object ou simplesmente um campo.
Entidades em ontologias e sistemas
No contexto de ontologias, entidade assume um significado ligeiramente diferente. Aqui, entidade é qualquer conceito que pode ser sujeito de uma relação. Em RDF, por exemplo, uma entidade é um IRI que pode aparecer em triplas. A diferença prática é que em ontologias a entidade é definida por suas conexões, não por seu estado interno. Isso importa porque muitos desenvolvedores aplicam lógica de domínio de software para modelagem ontológica e acabam criando entidades com comportamento quando deveriam ser apenas nós em um grafo. Se você está trabalhando com grafos de conhecimento, trate entidades como rótulos com propriedades, não como objetos com métodos.
Entity-Relationship vs Entity-Component
Dois paradigmas opostos para gerenciar entidades. No modelo relacional tradicional, entidade é uma tabela com linhas. No modelo ECS (Entity Component System), entidade é um identificador vazio que carrega componentes. Ambos resolvem o mesmo problema fundamental — representar coisas no sistema — mas com trade-offs. O modelo relacional escala bem para leitura e consistência, mas fatica quando a estrutura muda frequentemente. ECS escala bem para atualização e composição, mas exige que você gerencie a física das entidades manualmente. Em jogos com milhares de objetos, ECS pode processar updates 10x mais rápido que abordagem orientada a objetos tradicional, mas a curva de aprendizado é mais íngreme.
A escolha entre os dois depende de quanto o seu domínio muda. Se as entidades têm estrutura fixa e relações bem definidas, ER funciona. Se você precisa compor entidades dinamicamente, ECS ou algo similar é mais adequado.