Para fornecer uma perspectiva diferente da resposta já existente, eu diria que depende .
O genérico é mais reutilizável, mas o domínio específico indica intenção e separa melhor seu modelo de domínio da escolha da persistência. Se você fizer
var user = repo.GetUser(id);
user.Enabled = false;
repo.Update(user);
Então o repositório não tem idéia do que está fazendo (o que pode ser uma coisa boa do ponto de vista da reutilização). Mas você também perdeu a possibilidade de lembrar a intenção da operação.
Se você fizer o domínio específico:
repo.DisableUser(id);
Primeiro, talvez você possa implementar seu repositório de maneira mais eficiente. Você pode não precisar fazer com que o usuário o desabilite - talvez você possa apenas fazer um UPDATE
e acabar com isso. Além disso, você sabe o que está fazendo, então você pode optar por também adicionar uma boa mensagem de log em um log de auditoria ou algo similar no nível do repositório. Embora você ainda pudesse fazer auditoria do log com a versão mais genérica, você obteria uma entrada genérica de "cliente atualizado" em vez de uma entrada "cliente desativado" específica do domínio. Isso pode, em muitos casos, ser muito bom e valioso.
Isso é mais trabalho, e é por isso que, em geral, as pessoas usam a solução genérica porque ela é mais genérica e mais fácil de implementar. Mas não desconsidere o repositório específico do domínio como inutilizável ou ruim, a resposta é sempre depende .