Repository × Unit of Work
Dois padrões que costumam ser trocados um pelo outro, e o que de fato os separa.
Em uma frase
Repository é a coleção de um agregado ('me dê o Pedido 42'). Unit of Work é a transação que rastreia o que mudou e grava tudo de uma vez.
Critério a critério
Qual a metáfora?
- Repository
- Uma coleção em memória que esconde o banco.
- Unit of Work
- Uma unidade de trabalho: o que entrou, saiu e mudou nesta conversa.
Quem abre a transação?
- Repository
- Em geral cada método de repositório — ou delega ao UoW.
- Unit of Work
- O UoW: commit único no fim do caso de uso.
Quantos agregados toca?
- Repository
- Um tipo de agregado por repositório.
- Unit of Work
- Vários, na mesma transação de negócio.
Sem um, o que sobra?
- Repository
- Dá para salvar com UoW + SQL direto — mas a linguagem do domínio some.
- Unit of Work
- Dá para ter só repositórios — e espalhar commits ou esquecer atomicidade.
Quando escolher cada um
Repository
Você quer nomear a persistência na língua do domínio e trocar o 'como' (SQL, cache) sem o domínio saber.
Ver o conceito completoUnit of Work
Um caso de uso mexe em vários objetos e precisa de um único commit (ou rollback) coerente.
Ver o conceito completoPor que confundem
Achar que Repository 'já é' a transação. Em stacks maduras os dois convivem: o repositório registra no UoW; o UoW comita. ORM que mistura os papéis (DbContext) alimenta a confusão.