11.2. Identity Map
Cada registro carregado uma vez só: um mapa id → objeto.
Resumo
- Mapa id → objeto por sessão/transação. Antes de carregar, o mapper consulta o mapa.
- Garante um objeto por registro: evita duas cópias divergentes do mesmo dado na memória.
- Bônus: funciona como cache, mas o objetivo principal é a consistência da identidade.
- Um mapa por classe ou por sessão; chave = Identity Field. Objetos imutáveis (Value Object) não precisam.
- Escopo: por sessão/transação, não global. Normalmente fica dentro do Unit of Work.
Perguntas-chave
responda de cabeça, depois abraQual o objetivo principal do Identity Map?
Garantir que cada registro do banco seja representado por um único objeto na sessão.
Por que ele não deve ser global?
Mapa compartilhado entre sessões exige controle de concorrência sobre os objetos; o escopo é a sessão.
Precisa de Identity Map para Value Objects?
Não. Valores são imutáveis e comparados por valor, não por identidade.
Exercícios de fixação
0/5 respondidas1.
Duas partes do mesmo caso de uso carregam o pedido 7 e cada uma altera um campo. Ao gravar, uma alteração some. Qual padrão evita isso?
2.
Qual é o objetivo principal do Identity Map?
3.
Qual o escopo correto de um Identity Map?
4.
Qual objeto não precisa passar por um Identity Map?
5.
Onde o Identity Map costuma ficar em uma arquitetura com Data Mapper?