Acho que o grande problema aqui é que as pessoas acham que isto
é uma regra de negocio.
Depois dizem que se eu preciso fazer uma pesquisa irada para trazer os quartos que podem ser reservados no periodo em que o sol é ocultado por marte então eu tenho que escrever isso numa super hiper marte SQL matador que executa em 1 segundo… não.
Regras de negocio são coisas como “duas pessoas não podem reservar o mesmo quarto simultaneamente”, como eu forço isto ? Com queris ? Não. Com validadores. AS queries são ferramentas para perguntar, mas não para decidir. Vc cria um validador que consulta o banco e pergunta “tem alguem reservando o quarto neste peridodo” ? e a query vai responder, sim/ não . E o validador vai bloquear o ato de reserva ou não.
As queries matadoras são necessárias para agilizar a resposta À pergunta. Saber fazer a pergunta do jeito certo é muito importante, mas é uma questão de performance, não é uma questão de chegarou não na resposta. Em sistemas antigos pre-SQL isso nem sequer existe. vc faz um while e testa todos os registro na mão.
Portanto, repositorios podem ter regras de negocio ? Não. Repositorios existem para encontrar coisas, fazer (boas) perguntas. Não para decidir, impedir, proibir, controlar…
Agora, significa isso que repositorios ignoram o negocio ? Não. Eles sabem exactamente de que tipo de assunto estamos falando e o valor da pergunta que fazem.
Essa é diferença do DAO… O Dao não tem regras e ignora o negocio. Ele é um serviço de dados (dados, não entidades. Não se chama Entity Access Objet)
E claro que repositorios não são DAO nem façades para daos, nem interfaces de daos, nem coisas nenhuma dessas. Repositório é uma coisa e DAO é outra.
(Eu gostaria de saber quem foi o cretino que espalhou esse conceito de DAO e repositorio é a mesma coisa… ).
P.S. Eu sei quem foi o dito cujo. É uma pergunta retórica.