Quem deve lidar com as condições em consultas complexas, no mapeador de dados ou na camada de serviço?

essa questão fiz um trabalho muito bom de esclarecer minha confusão um pouco sobre o assunto, mas estou tendo dificuldades para encontrar fontes confiáveis ​​sobre quais devem ser as limitações exatas da camada de serviço.

Para este exemplo, suponha que estamos lidando com livros e queremos obter livros por autor. oBookDataMapper poderia ter um genéricoget() método que aceita condição (ões) como identificador único do livro, nome do autor, etc. Essa implementação é bastante trivial (logicamente), mas e se quisermos ter várias condições que exigem uma consulta mais complexa?

Digamos que queremos que todo o livro seja escrito por um determinado autor em um editor específico. Nós poderíamos expandir oBookDataMapper->get() método para analisar várias condições, ou poderíamos escrever um novo método, comoBookDataMapper->getByAuthorAndPublisher().

É preferível que a camada de serviço chame esses métodos [mais específicos] diretamente ou que as condições sejam analisadas antes de chamar as mais genéricas?BookDataMapper->get() método com múltiplas condições passou? No segundo cenário, a camada de serviço faria mais do "levantamento pesado" lógico, deixando o mapeador de dados bastante simples. A primeira opção reduziria a camada de serviço quase inteiramente para apenas um intermediário, deixando a lógica condicional para o mapeador de dados em métodos comoBookDataMapper->getByAuthorAndPublisher().

A preocupação óbvia de permitir que a camada de serviço analise as condições é que parte da lógica de domínio vaza do mapeador de dados. (isso é explicado na pergunta vinculadaAqui. No entanto, se a camada de serviço tivesse que lidar com as condições, a lógica não sairia da camada do modelo; O controlador ligaria$book_service->getByAuthorAndPublisher() independentemente.

questionAnswers(2)

yourAnswerToTheQuestion