Sprawdzenie aplikacji w Springu

0

Witam

Jestem w trakcie pisania aplikacji z wykorzystaniem Springa. Miałbym do Was prośbę - chciałbym abyście spojrzeli na mój kod i ocenili go (wskazali co robię źle, co powinienem poprawić itd.)
Jest to harmonogram pracowników. Mam w nim obiekt Employee, który reprezentuje pracownika. Poza polami jak imię, nazwisko czy adres, zawiera też listę dni. Moja koncepcja jest taka, że pracownik posiada dni, które są dla niego robocze (nie dla wszystkich dany dzien jest roboczy). Dzień z kolei posiada kilka pól - datę, ilość zadeklarowanych godzin, ilość godzin faktycznie przepracowanych, obecność planowana, obecność faktyczna. Aplikację chciałby oprzeć o REST. Udostępniłem już kilka metod i obecnie aplikacja umożliwia:

  • dodanie pracownika - wiadomo,
  • pobranie wszystkich pracowników - jw.,
  • pobranie pracownika na podstawie id - jw.,
  • pobranie dni roboczych w danym miesiącu dla danego pracownika (EmployeeService.getDaysFromMonth) - metoda zwraca listę obiektów typu dzień, który posiada wskazany pracownik z wskazanym miesiącem i rokiem
  • pobranie par pracownik, lista dni - zwraca mapę <Employee, List<Day>> zawierającą wszystkie dni robocze dla danego miesiąca i roku
  • druga metoda robi to co powyższa z tym, że nie zwraca mapy tylko listę obiektów EmployeeAndDaysList - ma to na celu umożliwienie przekazania tego jako JSON RESTowy
  • ustawienie dla danego pracownika, w danym miesiącu ilości planowanych godzin

Aplikakcja to na razie sam backend i to jeszcze nie gotowy, ale nie chce podawać ocenie od razu całej aplikacji, tylko część, abym mógł poprawić błędy i dalej pisac już z uwzględnieniem moich błędów.

Ogólnie najbardziej zależy mi żebyście ocenili strukturę samego projektu (podział na warstwy domeny, usług, repozytorium) i koncepcję tzn., że pracownika posiada listę dni (przy tych założeniach - dzień posiada dodatkowe wtrybuty - wydało mi się to najlepszą opcją).
Repozytorium to na razie taka atrapa w pamięci, ale docelowa chciałbym wykorzystać Spring Data. Sama aplikacja nie ma zbyt wiele konfiguracji bo jest to Spring Boot

https://github.com/nlo123/szp

1

Blędne jest używanie Chociażby java.util.Date
Brak odpowiedniego podziału na pakiety- zazwyczaj mamy taki podział na 3 grupy
-data
-domain
-web
w data są modele bazodanowe a w domain DTO

0

Dziękuję za odpowiedź

Rozumiem, że zamiast java.util.Date lepiej jest użyć Calendar? Ale czy do samego przechowywania daty Date nie jest odpowiedni? Wszystkie operacji na datach wykonuje z użyciem klasy Calendar.

Spotkałem się z podziałem na pakiety taki jak zastosowałem, czyli:

  • Domain - obiekty POJO
  • Repository - warstwa DAO
  • Service - usługi, logika aplikacji
  • Controller - kontrolery

Czy taki podział też jest stosowany czy w praktyce stosowany jest tylko ten podany przez Ciebie?

0

Ech jak zapisujesz date do bazy danych to korzystaj z java.sql.Date albo z nowego Java 8 Date API
Ja stosuje podział:
-config
-common
--exception
-data
--dao
--entity
-domain
--dto
--service
-web
--controller

Plus jakiegoś dodatkowe pakiety np. do common walidacje,do web security itp

0

odnośnie struktury projektu i organizacji pakietów ze względu na warstwy vs funkcjonalności to niedawno toczyła się ciekawa dyskusja tu na forum, polecam poczytać:
Podział na pakiety ze względu na warstwy czy funkcjonalność.

jeszcze odnośnie kodu patrząc na szybko rzuciła mi się w oko metoda

getEmployeesByNames

z repo. - jest do poprawy bo:

  1. przesłoniłeś sobie w metodzie pole
employees

i porównujesz z pustą listą

  1. porównujesz Stringi == niedobrze, bardzo..
0

a jak to jest z @ResponseBody , czy metody void powinny miec taka anotacje?

0

A jaki to by miało sens? o_O Zresztą teraz zamiast @ResponseBody lepiej po prostu zrobić osobny @RestController jak chcesz jsony zwracać.

0

@Shalom to wcale nie jest takie bezsensowne pytanie. Jak metoda void nie ma adnotacji 'ResponseBody', to zamiast pustego JSona dostaniesz 404 not found html stronkę ^^ #sprawdzone_info

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