Korzystamy z szeregu oddzielnych klas z przyrostkiem, -repository
aby pobrać dane z bazy danych; dla każdej tabeli własne repozytorium.
Mamy na przykład customerrepository
klasę, która ma wszelkiego rodzaju metody pozyskiwania klientów i vacancyrepository
która ma wszelkiego rodzaju metody pozyskiwania wolnych miejsc pracy.
Mam dwa pytania dotyczące tego sposobu robienia rzeczy:
Co powiesz na uzyskanie danych obejmujących wiele tabel? Na przykład mam ekran, który pokazuje wszystkich klientów, którzy nie utworzyli jeszcze wakatu. Czy
customerrepository
metody użycia zvacancyrespository
obu repozytoriów mogą zwracać wyniki i czy istnieje klasa wyżej w hierarchii (nazwijmy ją adataservice
), która pobiera wyniki z obu repozytoriów i łączy je w jeden wynik?ile logiki może obsługiwać takie repozytorium?
Myślę, że można zaimplementować w repozytorium „where active == true”, aby pobierać tylko aktywne rekordy, czy może nawet ta prosta logika powinna być obsługiwana przez klasę wyższą w hierarchii (nazwijmy to adataservice
)?
Przykład, na który teraz wpadałem, to ten:
Mamy listę pytań, która zawiera jedno lub więcej pytań.
Pytanie może mieć wynik, który jest przechowywany w osobnej tabeli.
Więc jeśli chcesz pobrać całkowity wynik listy pytań, musisz połączyć dane z questionlist
tabeli, tabeli pytań i questionstatus
tabeli.
W tej chwili mamy 3 różne repozytoria dla tych tabel.
Gdybym zapytał, questionlistrepository
jaki jest całkowity wynik dla listy nr 12, musiałby uzyskać dane z dwóch innych repozytoriów, a zatem miałby trochę logiki, czy to dozwolone?
A może istnieje taki, questionlistdataservice
który wie, z których repozytoriów korzystać?
Jeszcze jedna rzecz: nasze repozytoria mogą powodować IQueryable
, że usługa wywołująca może łatwo łączyć wyniki, ale co powiesz na to, kiedy tak nie jest, nie sądzę, że dobrym pomysłem jest odzyskanie całej zawartości wszystkich trzech tabel z Baza danych.
źródło
Odpowiedzi:
Repozytorium zwraca obiekty domeny i jest zbudowane na warstwach mapujących. W przypadku bardzo prostych domen domeny i tabele bazy danych mogą być bardzo podobne.
Jeśli Twoje repozytorium zawsze zwraca dokładną reprezentację struktury danych, może to być rzeczywiście Tabela Danych Bramowych, zwana też Obiektem Dostępu do Danych (DAO).
Przykład: Twoja baza danych zawiera tabele dotyczące osoby i adresu. W Twojej domenie aplikacji adres nie jest własnym podmiotem, jest tylko własnością Osoby. W takim przypadku nie byłoby PersonRepository i AddressRepository. Masz tylko PersonRepository. Domena nie powinna martwić się, w jaki sposób utrwalone są dane domeny. Ci odpowiedzialni są w warstwie za repozytorium.
Z twojego przykładu wydaje się, że faktycznie masz DAO i właśnie nazwałeś je Repozytoriami.
źródło