Sprawdzenie aplikacji w Springu

Sprawdzenie aplikacji w Springu
N1
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 7 lat
  • Postów:18
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

S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
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


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
edytowany 1x, ostatnio: scibi92
N1
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 7 lat
  • Postów:18
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?

jarekr000000
Nie rób operacji na datach z Calendar - on się do tego nie nadaje. Dlatego w Java 8 powstało nowe API do dat - zacznij od wyszukania LocalData (i tego się trzymaj).
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
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


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
edytowany 1x, ostatnio: scibi92
jarekr000000
Co do ustalenego podziału to polecam obejrzenie super filmiku z Uncle Bobem i przemyślenie.... https://vimeo.com/97530863
P7
  • Rejestracja:ponad 9 lat
  • Ostatnio:4 dni
  • Lokalizacja:Warszawa
  • Postów:89
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ć:
http://4programmers.net/Forum/Java/275862-podzial_na_pakiety_ze_wzgledu_na_warstwy_czy_funkcjonalnosc

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

Kopiuj
getEmployeesByNames

z repo. - jest do poprawy bo:

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

i porównujesz z pustą listą

  1. porównujesz Stringi == niedobrze, bardzo..
edytowany 1x, ostatnio: Pablitto77
FI
FI
  • Rejestracja:około 10 lat
  • Ostatnio:około 4 lata
  • Postów:471
0

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

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

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


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:4 miesiące
  • Postów:2787
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.