Spring boot - prosta aplikacja - code review

0

Hej
Napisałem jakąś pierwszą wersję swojej aplikacji do liczenia czasu pracy. Założenie jest takie, żeby dodawać sobie czasy pracy (WorkActivity) i później na ich podstawie wysyłać sobie informacje na maila. Pliki kontrolerów i .html powstały trochę dodatkowo bo głównie chciałem się skupić na tym, aby warstwa aplikacji i wszystko co niżej działało i wyglądało dobrze (jak mi to wyszło to się okaże ;) )

https://github.com/krasnoludkolo/WorkCounter

Z rzeczy które wiem co trzeba zrobić:
-Ogarnąć kiedy używać obiektów entity (mniej), a kiedy biznesowych (wiecej)
-Oddzielić jakoś typowe CRUDowe działania od innych (chociaż to trochę już jest po przez osobne UCki, jeden do CRUDa, a reszta do innych rzeczy jak np. mail albo generowanie raportów)
-Klasa Result jest w sumie teraz po nic
-lepiej zorganizować pakiety ale nie wiem jak
-lepsze testy (!)

Drogi rozwoju
-dodać aby każdy użytkownik miał swoją listę
-wiecej opcji generowania raportów
-może jakis REST

Byłbym wdzięczny za każde sensowne uwagi ;)

Pozdrawiam ;)

1

Spędziłem nad review 3 minuty to o wiele za mało ale zauważyłem następujące rzeczy:

  • używasz intefejsów mając tylko 1 implementację: to redundancja: wystarczy sama klasa
  • używasz field injection zamiast constructor injection w springu raczej preferuje się constructor injection (nie trzeba pisać @Autowired/@Inject): Spring sam wie jak to wstrzyknąć od którejś wersji 4.x, co więcej możesz całkowicie wyeliminować konstruktory ("wizualnie z kodu" będą w bajtkodzie) przy stosowaniu Lomboka: @RequiredArgsConstructor (można mieć DI bez pisania @Inject / @Autowired i posiadania bolierplate constructorów co jest dla mnie bardzo fajne), wstrzykiwane @Components powinny być przy tym final
  • przy wysyłce maila propagujesz wyjątek MessagingException preferowałbym jakiś RuntimeException na coś takiego z ładnym wpisem do logów
  • do sklejanie stringów nie w pętli możesz używać metody String.join od JDK 1.8 pierwszy argument to separator przy sklejaniu jest to oczywiście ""
String.join("", "moj", "sklejony", "tekst)

daje mojsklejonytekst (zamiast StringBuilder)

0

btw. na Github ne mozna wystawic Pull Requesta i żeby każdy mógł zrobic review? - sam mam wiecej do czynienia z bitbucket.

1

używasz intefejsów mając tylko 1 implementację: to redundancja: wystarczy sama klasa

No ta, proxy nie ma nic do rzeczy :D

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