Sposób na przekazywanie danych do widoku

0

Witam,
Mam 3 tabele:

  • Wpis(id, tresc, id_autor,czas)
  • Komentarz(id, tresc, id_autor, czas, id_wpis)
  • Uzytkownik(id, nazwa_uzytkownika, email).
    Chcę w widoku wyświetlić dane w postaci:
    wpis1:
    -komentarz1
    -komentarz2
    -komentarz3:
    wpis2:
    -komentarz1
    -komentarz2
    ....
    wraz z autorami. I tu moje pytanie: w jaki sposób najwygodniej/najlepiej pobrać dane z bazy i przekazać do widoku. Myślałem o wzorcu DTO ale nie wiem jak tego użyć
0

DO JAKIEGO WIDOKU? Aktualnie moja magiczna kula jest w naprawie

1

Nie bardzo rozumiem pytanie. Pomysł z DTO raczej sam sie nasuwa i jest dość oczywisty w implementacji. Pobierasz dane z bazy a potem ładujesz je do czegoś takiego:

class WpisyDTO{
    private final List<Wpis> wpisy;
}
class Wpis{
    private final String tresc;
    private final List<Komentarz> komentarze;
}
class Komentarz{
    private final String tresc;
}

(oczywiście możesz tam też wrzucić te pola z autorami, datą etc, to tylko przykład!)

0

A czy to kontroler powinien opakowywać w DTO dane otrzymane z serwisu czy to serwis powinien zwracać gotowe już obiekty DTO?

0

Ja bym powiedział że to serwis powinien serwować wyniki już spakowane w DTO.

0

A czy to jest dobrze żeby jeden obiekt DTO zawierał inne obiekty DTO? np.

public class WpisDTO {
	private List<KomentarzDTO> komentarze;
}
2

Tak, na tym to polega.
Używasz DTO po to, żeby nie działać na modelach bazodanowych. W DTO możesz ograniczać ilość informacji, którą chcesz przekazać klientowi, albo łączyć kilka obiektów danych w jeden. Ogólnie kontroler powinien pobierać od klienta JSON w formie DTO, przekazywać go do serwisów, które wykonują nim jakąś logikę. Następnie przepisują/transformują taki obiekt na zwykły obiekt bazodanowy i dzięki odpowiednim DAO'som zapisują go w bazie. W drugą stronę działa to podobnie - serwis pobiera dane jako model, transformuje na DTO i przekazuje do kontrolera.

1 użytkowników online, w tym zalogowanych: 0, gości: 1