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 completo

Unit of Work

Um caso de uso mexe em vários objetos e precisa de um único commit (ou rollback) coerente.

Ver o conceito completo

Por 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.