Spring - pytania.

0

Tytuł tematu może ogólnikowy, ale mam parę pytań:

  1. Czym są endpointy? Dobrze rozumiem, że są to "zmapowane" metody (np w Kontrolerze) które się wykonują po wysłaniu jakiegoś requesta?
  2. Jak poddawać obiekty walidacji? Czy nie lepiej byłoby stworzyć metodę która robiła by z Encji, DTO, i na odwrót. Walidację przeprowadzać na DTO, które miałoby jakąś klasę która mogłaby poddać je validacji (a encję zostawić bez walidatora) i dopiero potem przekonwertować na Encję?
    Walidator powinien być osobną klasą tak? I mogłoby to wyglądać mniej więcej tak:
public void setName(String name){
validator.checkName() // jeżeli byłby false to wyrzuciłby jakiś wyjątek
this.name = name;
}

Czy ten wyjątek powinno się obsłużyć? Jaki wyjątek powinien on dziedziczyć/rozszerzać?
3) Czemu metody statyczne są niezalecane, a z tego co widzę na forum to nikt nie popiera tworzenia metod statycznych?
4) Repozytoria i DAO. Repozytorium dodać do Serwisu czy do DAO? Na logikę wydaje mi się, że lepiej do serwisu bo dodanie go do DAO powoduje "drzewko wywołań" w kontrolerze. serwis.metoda() w serwisie dao.metoda() w DAO repozytorium.metoda().
5) Jak dodać Listę Enum do Encji? Hibernate wyrzuca mi błąd: "Unable to build EntityManagerFactory"

List<Subject> subjects;
//
@OneToMany
List<Subject> subjects;

Takie sposoby nie działają.
Na razie tyle.

0
  1. https://stackoverflow.com/questions/29734121/what-is-endpoint-in-rest-architecture
    2.Są czasami używane jako utilsy, ale statyczne metody nie mogą się odwołać do zmiennych instancji, czyli jak masz na przykład Service to nie możesz wywołać metod na wstrzykniętych DAO
    4.Repositoria i DAO to w Springu są obiekty warstwy DAL. Albo masz DAO albo Repositoria
0
  1. Czemu nie powinno się mieć DAO i Repozytoriów? Załóżmy, że chciałbym wykonać przykładowe dwa zapytania. Jedno by wyciągnęło z Bazy Danych jednego wybranego pracownika, a drugie by wyciągnęło pracowników o pensji znajdującej się w przedziale [min,max]. Drugie zapytanie raczej wymusza skorzystanie z DAO. Natomiast do pierwszego dużo szybciej skorzystać z Repozytorium.
0

Wtf?
Dobra to co w takim razie według Ciebie Repositorium? Bo Repository ze Spring Data jest abstrakcją dostępu do danych (np. Spring Data JPA) która "skupia się" na metodach dostępowych do wybranej encji. Na przykład masz encje Item i masz ItemRepository w którym masz dużo metod już dostarczonych przez Spring Data ale zawsze możesz dodać nowe

0

Szczerze mówiąc, myślałem że z racji tego że repozytorium to jest interfejs, to nie będzie możliwe tworzenie bardziej rozbudowanych funkcji z zapytaniami wykorzystujacymi jpql albo criteria buildera.

1
  1. dobrze rozumiesz
  2. @Valid na DTO w controlerze, adnotacje dodatkowo na klasie modelu (@Notnull, @Notempty, @length etc). Jak pogooglasz w tym kierunku to Ci się rozjaśni odnośnie wyjątków etc.
  3. Kiepsko się je np. testuje
  4. Dla spring data repozytoria i dao to to samo. Możesz definiować sobie swoje metody na podstawie składni Spring DATA albo pisać własne query w jqpl albo nawet w sql.
  5. Oznacz jako @enumerated albo @ElementCollection
1

@Aisekai: to zamiast żyć domysłami to sobie sprawdź bo piszesz totalne głupoty:
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/

1
  1. Odnośnie walidacji w Spring to nie ma jakiś uber ścisłych zasad. Trochę tematu wyczerpuje ten wątek:
    https://stackoverflow.com/a/12149331

który to mówi, że możesz mieszać bez problemu te techniki walidacji.
W praktyce z tego co pisałam w aplikacjach to unikałabym walidacji adnotacjami na encjach JPA. Pisząc pola encji JPA, dodajesz adnotacje mapowania, adnotacje Lomboka do getterów , ewentualnych setterów itd i ewentualnie kilka metod 'must have' aby nie wybebeszać potem gdzieś wyżej encji ala studentsGroup.getStudents().add(newStudentToAdd); .
Z tego względu klasa encji JPA już troche rzeczy posiada i nie ma sensu dokładać kolejnej odpowiedzialności tej klasie -> czyli odpowiedzialności za walidację części swoich pól i kolejnych adnotacji zaciemniających kod kiedy można wynieść to do osobnej klasy Validatora i jasno rzucać wyjątek. Pomijam dziwne rzeczy typu encje na milion linijek w stylu DDD , bo tego się czytać nie da i jest to skomplikowane.

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