Hej, mam problem, nie potrafię do końca zrozumieć architektury tworzenia aplikacji, może ktoś tutaj będzie potrafił mi to wyjaśnić w bardziej przejrzysty sposób.
Otóż sprawa wygląda tak że nie potrafię zrozumieć klas serwisu, zaczynając od początku ja to rozumiem tak, załóżmy że użytkownik jest zalogowany i ma swoje produkty na stronie:
Klient w swoją listę produktów na stronie -> Kontroler przekazuje to polecenie od usera do serwisu w którym jest sprawdzenie czy user posiada jakieś produkty itd. -> Jeśli tak to leci zapytanie do bazy w celu pobrania produktów -> Wracamy do serwisu, tam jest to mapowane na DTO -> DTO wysyłamy do kontrolera który przekazuje to na stronę jako odpowiedz.
Moje 1 pytanie jest podstawowe, czy ja to dobrze rozumiem ?
2 pytanie Jeśli jest to formularz to na stronie powinno się umieszczać obiekt DTO, użytkownik wypełnia tak naprawdę DTO jako formularz, ten formularz dto jest wysyłany do serwisu w którym jest mapowany do encji, encja jest odpowiednio tam walidowana itd. a następnie umieszczana w bazie danych (Chyba że mapowanie powinno być jako 1 w kontrolerze ? Przed wysłaniem do serwisu )?
3 pytanie Aplikacja się rozrasta, załóżmy że nasz user ma dużo funkcji, logowanie, rejestracja, zmiana hasła, usunięcie konta, zmiana nicku, zmiana maila itd. Te wszystkie funkcje trzeba gdzieś zaimplementować, i pierwsze co mi się narzuca to UserService, ale nie wiem czy dobrze myślę bo wtedy taka jedna klasa byłaby po prostu wielkim gniotem na kilkaset lini kodu, możecie doradzić co robi się w takiej sytuacji ? Podzielić to np. na UserRegisterService, UserLoginService, UserChangePasswordService itd. i te wszystkie klasy powinny znajdować się w pakietach user->services->UserRegisterService itd.?
4 pytanie, już ostatnie :D Kwestia walidacji takich obiektów, kiedy powinna nastąpić, korzystając ze springa zazwyczaj robiłem to adnotacjami nad polami w klasie DTO, jednak wiadomo nie do wszystkiego są adnotacje a czasami np. potrzebujemy sprawdzić czy hasła są takie same, zaczynając po kolei użytkownik wpisuje formularz na stronie (Formularz jest jako DTO), ten DTO jest odbierany przez kontroler, następuje wstępna walidacja (Ilość znaków, czy nie jest puste itd.) jeśli będzie jakiś błąd to korzystam z BindingResult który ten błąd wyłapie i zwróci do użytkownika, jeśli tego "wstępnego" błędu nie ma to dto wędruje do.. ? no właśnie gdzie ? Do serwisu w którym będę miał np. UserPasswordRepeatService ? w którym sprawdzę czy hasła są takie same ? a następnie zmapuje do Encji a pozniej wykonam na niej odpowiednie operacje ?
Z góry dziękuję za każdą podpowiedz co do tego, starałem się napisać wszystko najbardziej zrozumiale jak tylko potrafiłem.