Cześć.
Jestem samoukiem, od dobrych 3 miesięcy uczę się programowania, a teraz przyszło mi napisać pierwszy w życiu projektu w Spring MVC. Stoję teraz w miejscu, bo do głowy przychodzą coraz to nowe pytania i wątpliwości.
Tutaj link do GitHub żeby było wiadomo o czym piszę:
https://github.com/sylwekp/TodoApp
Na razie dodałem tylko rejestrację, logowanie, przypominanie hasła na e-mail, a także wyświetlanie listy zadań z paginacją.
Do zrobienia mam: sortowanie wyników przy pomocy przycisku DropDown, dodawanie, edytowanie, usuwanie zadań, oznaczanie ich jako wykonane, a także jakiś mały panel admina.
Pytania w związku z powyższym:
- Czy ten kod jakoś wygląda, tzn. ma ręce i nogi? Nazwy metod, zmiennych, podział na pakiety?
- DTO przy takiej "aplikacji" jest konieczne? Encje nie mają dużo pól, przy rejestracji użytkownika w takie pola jak, np. enabled, role wpisywałbym wartości po prostu w serwisie, żeby wszystko było pełne.
- Czy takie coś: https://github.com/sylwekp/TodoApp/blob/master/src/main/java/pl/sylwekp/todolist/controller/UserController.java#L48 jest w porządku? Jeśli nie to jak inaczej do tego podejść, jakieś wskazówki?
- Usuwanie ToDo: nie wiem jak się do tego zabrać. Jeśli zrobiłbym controller z metodą która mapuje na .../users/todos/todo/{id}/delete i zawiera w sobie ...todoService.delete(id) to przecież inny zalogowany użytkownik mógłby wpisać sobie URL z dowolnym ID i mógłby usunąć zadanie innego użytkownika. Musiałbym dodać metodę zwracającą true/false czy to zadanie aktualnie zalogowanego użytkownika. Gdzie to więc sprawdzić? W kontrolerze czy metoda w serwisie:
todoService.delete(principal.getName(), id) -> tam pobranie zadania na podstawie id i przyrównanie nicku rzeczywistego właściciela z tym który przesłałem z controllera.
Jeśli tak to wyrzucić wyjątek podobnie jak w pytaniu 3 i go obsłużyć? - Jeśli miałbym już zostać przy DTO to rozmyślam też nad edycją zadania. Dodawanie wiadomo - przez DTO podobnie jak rejestracja użytkownika, ale jak podejść do edytowania?
Z poziomu kontrolera todoService.edit(id) -> w serwisie w tej metodzie pobieranie z repozytorium zadania, mapowanie go na DTO i przesyłanie go z powrotem do kontrolera, następnie dodawanie do modelu i zwracanie widoku, coś takiego?
A, musiałbym też sprawdzić podobnie jak w pytaniu 4, czy jest to zadanie tego konkretnego użytkownika i też: wywalić wyjątek? - Sprawa commitów. Nazewnictwo w miarę? Jeden commit = 1 funkcjonalność, poprawka? Jeśli dodaję mały opis to zaczynać od 3 linijki, a drugą pozostawić pustą, tak?
Na razie tyle. Śmiało krytykować i pisać jakie babole narobiłem, wtedy wezmę się za poprawki. Projekt ten docelowo ma mi posłużyć przy aplikacji do pierwszej pracy, bądź stażu/praktyki, stąd te wszystkie pytania i rozkminy. Za każdą odpowiedź z góry dzięki :)