Jaki typ zwracać podczas wysyłania zapytań do wielu podmiotów w warstwie Repozytorium?

W to pytanie mam następujące warstwy:

Warstwa usług (korzystanie z IoC w celu połączenia z repozytorium)Model domeny (POCO / Podmioty domeny, zdefiniowane interfejsy repozytoriów)Warstwa repozytorium (EF .edmx i zaimplementowane repozytoria)

Wiele razy jest to naprawdę proste: warstwa repozytorium pyta bazę danych za pośrednictwem Entity Framework i zwracaIList<SomeDomainEntity> do dzwoniącego, który był warstwą usług. Therodzaj zwracany jest typ zdefiniowany w modelu domeny.

Problem, z którym się spotykam, polega na tym, że muszę wysłać zapytanie do POCOs A, B i C i zwrócić wszystkie dane. Ponieważ nie obsługuję żadnej logiki w repozytorium, muszę zwrócić te dane z powrotem do warstwy usługi, która ma zostać przetworzona (bezpośrednio lub bardziej prawdopodobnie, wywołując pewną logikę na modelu domeny). Jednak nie mampojedynczy typ już z wyników zapytania repozytorium powrócić do dzwoniącego.

Anonimowy typ kursu obsługuje to w przykładach, które widzę, ale ponieważ nie przetwarzam tej logiki ze zwróconych danych bezpośrednio w repozytorium i musi ona zostać zwrócona, muszę zwrócić typ fizyczny. Oto kilka rozwiązań, o których pomyślałem, ale nie jestem pewien, czy lubię:

Utwórz nową jednostkę domeny w modelu domeny, która zasadniczo jest kompozycją wszystkich danych, o które pytałem, więc ten nowy pojedynczy typ może zostać zwrócony. Wydaje się to niewłaściwe, aby tworzyć typy abritrary dla potrzeb zapytań satisy.Spraw, aby warstwa usług wywoływała poszczególne repozytoria osobno dla jednostek A, B, C, a następnie zajmowała się danymi z każdego zwróconego obiektu. Wydaje się, że to dużo dodatkowej pracy.Utwórz ViewModel, aby powrócić. Wydaje mi się to również nie na miejscu. W znacznym stopniu wykorzystuję klasy ViewModel między moją warstwą usług i warstwami interfejsu użytkownika, ale nigdy nie widziałem, by wykorzystywały je do powrotu z repozytorium.

Nie mogę być jedynym zapytaniem w wielu jednostkach, aby uzyskać konglomerat danych z powrotem, który musi zostać dodany do typu i zwrócony do dzwoniącego. Jaka jest powszechna praktyka lub standardowy sposób postępowania w celu rozwiązania mojego problemu?

Dzięki!

questionAnswers(3)

yourAnswerToTheQuestion