Od niedawna rozwijam własny projekt, w którym prezentuje swoje umiejętności (Spring + Hibernate + Thymeleaf). Docelowo chciałbym, aby stanowił załącznik do mojego CV. Napiszcie proszę, co sądzicie o tym, co do tej pory stworzyłem. Rozwijam go od zera na podstawie wymagań funkcjonalnych.
Nie ma readme więc nie wiem co to robi. Nie ma konfiguracji mavena ani gradla, więc nie mogę tego zbudować. Nie wiem nawet jaką wersję Springa i Hibernate używasz :(
Ale podoba mi się nazwa tms
taka nie za wiele mówiąca
Nie lubie MySQLa :|
Nieśmiertelny i uświęcony zestaw "Spring + Hibernate + Thymeleaf" wysłało już 14 tysięcy 739 absolwentów bootcampów
Takich githubów ci u nas dostatek ale i ten przyjmujemy jak wróżbę zwycięstwa
@KamilAdam:
Faktycznie nieco enigmatycznie. Dzięki za uwagi. Dodałem już do repozytorium readme i pom'a.
BraVolt napisał(a):
Nieśmiertelny i uświęcony zestaw "Spring + Hibernate + Thymeleaf" wysłało już 14 tysięcy 739 absolwentów bootcampów
Takich githubów ci u nas dostatek ale i ten przyjmujemy jak wróżbę zwycięstwa
Może wystarczy w CV podawać numer (oryginał: numerowane dowcipy w domu wariatów)
Dobry dowcip to nie jest zły pomysł. Inteligentna osoba która dostanie CV nie ma co prawda pojęcia jak się czyta kod pod Thymeleaf ale dobry dowcip może docenić i zdecydować, żeby takie CV puścić dalej, bo może jak dowcip dobry to programiści spojrzą życzliwym okiem na fajnie napisany kod?
Tak na kilka minut patrzenia w kod:
-
https://github.com/sparrov/tms/blob/main/src/main/java/pl/szymonwrobel/tms/services/UserService.java
Metody createSomething - dobrze by było zmienić aby coś jednak zwracały, jakąś odpowiedź, tak aby na froncie było wiadomo co się zadziało.
a) https://github.com/sparrov/tms/blob/main/src/main/java/pl/szymonwrobel/tms/services/TrainingApplicationService.java to co w 2
b) https://github.com/sparrov/tms/blob/main/src/main/java/pl/szymonwrobel/tms/services/TrainingApplicationService.java#L46 tę metodę można by skrócić o 4 linijki
Nie musisz pisać kodu tak:
List<Something> listOfSth = new ArrayList<>();
return listOfSth;
Możesz pisać od razu tak:
return new ArrayList<>();
W wielu miejscach robisz tak samo.
-
https://github.com/sparrov/tms/blob/main/src/main/java/pl/szymonwrobel/tms/services/InitialDataService.java#L41 XD
Może lepiej te dane testowe przenieść do pliku i wczytywać je i zapisywać przy starcie aplikacji do bazy? A jeśli nie, to nie wiem. chociażby zamień to na Mapę ;) -
Zamień logi na język angielski.
-
Plus za poprawne wstrzykiwanie zależności i brak @Autowired
-
Minus za thymeleafa. Nawet tam nie zaglądam tam, bo szkoda mi na to czasu.
Moim zdaniem szkoda też i Twojego czasu na Liścia.
Całe API nie jest jakieś potężne. Za wiele kodu tam nie ma, dobrze by było wpaść jeszcze na kilka funkcjonalności i je pododawać.
Zainteresuj się "architekturą" *package per feature * zamiast pakować wszystkie serwisy do jednego worka, kontrolery do innego itp bo przez to cała enkapsulacja projektu leży i kwiczy (nie ma jej).
Ja myślę, że jeszcze dużo pracy przed tobą. Dużo nieprzemyślanego kodu, który nic nie robi, zakomentowane metody, złe nazewnictwo, złe praktyki (tworzysz beana, a potem tworzysz go przez new), brak testów.
Nie ma testów, odrzucam od razu
private UserEntity adminUser;
private UserEntity trainerUser1;
private UserEntity trainerUser2;
private UserEntity trainerUser3;
private UserEntity studentUser1;
private UserEntity studentUser2;
private UserEntity studentUser3;
private TrainingEntity training1;
private TrainingEntity training2;
private TrainingEntity training3;
private TrainingEntity training4;
private TrainingApplicationEntity trainingApplication1;
private TrainingApplicationEntity trainingApplication2;
private TrainingApplicationEntity trainingApplication3;
private TrainingApplicationEntity trainingApplication4;
private BlockEntity block1;
private BlockEntity block2;
private BlockEntity block3;
private BlockEntity block4;
private BlockEntity block5;
private BlockEntity block6;
private BlockEntity block7;
private BlockEntity block8;
private ClassesEntity classes1;
private ClassesEntity classes2;
private ClassesEntity classes3;
private ClassesEntity classes4;
Nie miałeś wrażenia, że warto rozważyć użycie kolekcji?
package pl.szymonwrobel.tms.enums;
public enum UserType {
ADMIN("Administrator"),
TRAINER("Prowadzący"),
STUDENT("Uczestnik");
private final String displayName;
UserType(String displayName) {
this.displayName = displayName;
}
public String getDisplayName() {
return displayName;
}
}
Zastanawiałem się po co taka konstrukcja.
Chyba wiem, relacja między prowadzącym zajęcia a szkolącym po lekkim zmieszaniu się wymagają 'doprecyzowania'
trainer - trainee
teacher - student
PS
To żart, oczywiście