Какой тип возвращать при запросе нескольких объектов в слое Repository?

У меня есть следующие слои, вовлеченные в этот вопрос:

Сервисный уровень (использование IoC для вызова репозитория)Доменная модель (POCO / доменные объекты, определенные интерфейсы репозитория)Уровень репозитория (EF .edmx и реализованные репозитории)

Часто это действительно просто: слой репозитория запрашивает базу данных через Entity Framework и возвращаетIList<SomeDomainEntity> вызывающей стороне, которая была Service Layer.тип возвращается тип, определенный в модели предметной области.

Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно сделать запрос через POCO A, B и C и получить данные из всего, что должно быть возвращено. Поскольку я не обрабатываю какую-либо логику в репозитории, мне нужно вернуть эти данные обратно на уровень обслуживания для обработки (напрямую или, более вероятно, путем вызова некоторой логики в модели предметной области). Однако у меня нетодин тип больше из результатов запроса к хранилищу, чтобы вернуться к вызывающей стороне.

Анонимный тип, конечно, обрабатывает это в примерах, которые я вижу, но, поскольку я не обрабатываю эту логику из возвращаемых данных непосредственно в репозитории, и ее нужно возвращать, мне нужен физический тип для возврата. Вот некоторые решения, о которых я подумал, но не уверен, что они мне нравятся:

Создайте новую доменную сущность в доменной модели, которая, по сути, является композицией всех запрашиваемых мной данных, так что этот новый единственный тип может быть возвращен. Это кажется неправильным для создания аббревиатур для удовлетворения запросов.Сделайте так, чтобы сервисный уровень вызывал отдельные репозитории для объектов A, B, C по отдельности, а затем обрабатывал данные каждого возвращаемого объекта. Это кажется большой дополнительной работой.Создайте ViewModel для возврата. Это кажется мне неуместным. Я активно использую классы ViewModel между своим сервисным уровнем и уровнями пользовательского интерфейса, но никогда не видел, чтобы они использовались для возврата из хранилища.

Я не могу быть единственным, кто обращается к нескольким объектам, чтобы получить конгломерат данных, которые необходимо добавить в тип и вернуть вызывающему. Что является обычной практикой или стандартным способом решения этой проблемы?

Спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос