Qual tipo retornar ao consultar várias entidades na camada Repositório?

Eu tenho as seguintes camadas envolvidas nesta questão:

Camada de serviço (usando o IoC para chamar o repositório)Modelo de Domínio (POCO / Entidades de Domínio, Interfaces de repositórios definidos)Camada de Repositório (EF .edmx e repositórios implementados)

Muitas vezes é realmente direto: banco de dados de consultas da camada de repositório via Entity Framework e retornaIList<SomeDomainEntity> para o chamador que era a camada de serviço. otipo retornado é um tipo definido no Modelo de Domínio.

O problema que estou encontrando é quando preciso consultar os POCOs A, B e C e obter dados de todos para serem retornados. Como não manipulo nenhuma lógica no repositório, preciso retornar esses dados de volta à camada de Serviço para serem processados ​​(seja diretamente ou mais provavelmente chamando alguma lógica no modelo de domínio). No entanto eu não tenhoúnico tipo mais a partir dos resultados da consulta do repositório para retornar ao chamador.

Um tipo anônimo de curso lida com isso nos exemplos que vejo, mas como não estou processando essa lógica dos dados retornados diretamente no Repositório e ele precisa ser retornado, preciso de um tipo físico para retornar. Aqui estão algumas soluções que eu pensei, mas não tenho certeza se gosto de alguma:

Crie uma nova entidade de domínio no Modelo de Domínio que é essencialmente uma composição de todos os dados que eu consultei, portanto, esse novo tipo único pode ser retornado. Isso parece errado para criar tipos abritários para satisfazer as necessidades de consulta.Faça com que a camada de serviço chame os repositórios individuais em entidades A, B, C separadamente e depois lide com os dados de cada objeto retornado. Isso parece muito trabalho extra.Crie um ViewModel para retornar. Isso parece fora de lugar para mim também. Eu aproveito as classes do ViewModel fortemente entre minha camada de serviço e camadas de interface do usuário, mas nunca as vejo alavancadas para retornar do repositório.

Eu não posso ser o único a consultar várias entidades para obter um conglomerado de dados que precisa ser adicionado a um tipo e retornado ao responsável pela chamada. O que é uma prática comum ou uma maneira padrão de resolver isso para resolver o problema?

Obrigado!

questionAnswers(3)

yourAnswerToTheQuestion