Jak podejść do nauki Spring oraz SpringBoot?

Wątek przeniesiony 2023-07-03 09:30 z Java przez Riddle.

0

Hej, ktoś poleci najlepsze źródła do nauki oraz sposób? Kupiłem kurs na udany ale strasznie mnie nudzi i nie mogę się skupić po 30min a kurs trwa 50h. Próbowałem pisać jakiś projekt ale też ciężko to idzie na starcie. Nie potrafię zrozumieć jak mogę się poruszać po projekcie bez frontendu. Czy jest konieczne napisanie go, żeby móc się poruszać i sprawdzać działanie jak np w projekcie konsolowym? Strasznie dużo rzeczy w tym springu a domyślam się, że na juniora nie muszę umieć wszystkiego, dlatego na czym się skupić najbardziej?

1

Teoretycznie Spring nadal ma możliwość własnego frontu server-side.
Jako rzecz "mniej modna", znajdziesz mniej aktualnego wsparcia, coś-tam z wieloletnich tutoriali może nie być 100% aktualne.

Z jakiejś rozmowy przy kawie się wzięło wygenerowanie próbnego projektu MVC (rok temu / dwa ???), i było kombinowanie z typem tempate czy rozszerzeniem pliku, coś takiego ... coś tam trzeba było zadbać samodzielnie

Aha, oczywiscie "Spring MVC" jest tym, o czym mozesz poczytać. Trudno obiecać, że to ma 100% przedłużenie w etat, ale do demo na etapie edukacji, a bez frontu javasrirtowego, możesz testowac kernel i części Springa nie tak bardzo odmienne od endpointów REST

Faktem jest, że Spring MVC jest ciągle zawarte w tym frameworku.

BTW. to nie tak prosto "pociągnąć za szunek i zatrudnią mnie jako juniora"

0

@AnyKtokolwiek: Chyba prawie nic nie zrozumiałem xD

1
LukaszCh233 napisał(a):

@AnyKtokolwiek: Chyba prawie nic nie zrozumiałem xD

Poczytaj o Spring MVC

1

Zobacz sobie jakiś krótki wstęp na yt typu .
Możesz sobie przejrzeć to repo: https://github.com/Patresss/Java-Own-Framework---step-by-step/blob/main/README_pl.md masz tu opisane jak to wszystko mniej więcej działa a następnie stwórz jakąś aplikacje. Na juniora wystarczy ci zrozumienie DI, Jpa, mvc i moze podstawy security. Co od aplikacji do moim zdaniem warto zacząć od frontu bo jak zaczniesz od backendu to prawie na pewno będzie do prosty crud bez żadnej logiki, którą potem będziesz rzeźbił na froncie.

0

Musisz zmienić myślenie. Poruszanie się po projekcie? To zależy jaki to projekt. Obecnie króluje tworzenie projektów w stylu REST API na backendzie i komunikowanie się z tym API za pomocą frontendu.

Na start nie potrzebujesz frontu. Aby sprawdzać co wypluwa Twoje API wystarczy Ci Postman/Curl.

To już będzie można uznać za poruszanie się po projekcie. Potem to już tylko zostaje dodawanie kolejnych funkcjonalności.

0

@kixe52: Chodzi mi o to np. że mam funkcje dodawania czegoś do bazy to jak mogę zrobić tak żeby móc na stronie lokalnej dodawać coś. Nie da się tego bez no HTML?

0

Co to jest strona lokalna?

Napisałem Ci wyżej. Tworzysz REST API które jest odpowiedzialne za komunikację i to API następnie wykonuje logikę która zaimplementujesz. Czy to właśnie odbiór czegoś aby to zapisać do bazy czy też przetworzenie otrzymanych danych i wyplucie wyniku jakiejs operacji. API definiujesz tak aby odbieralo i wypluwalo dane w postaci JSONa.

Wszystko to - czyli działanie Twojego API możesz sprawdzić za pomocą Postmana / curla i nie potrzebujesz do tego ani grama HTML

1

Zawsze możesz uderzać do swojego REST API przez Postman. Jest to mniej widowiskowe, niż wypełnianie jakichś formularzy na stronie, czy też wyświetlanie na niej zawartości bazy, ale możesz tym testować, czy output z Twoich endpointów jest taki, jak sobie zaplanowałeś.

0

Czyli zamiast tworzyć input i podawanie wartości to tworze od razu obiekt z danymi i daje go do funkcji i później sprawdzam czy działa?

0
LukaszCh233 napisał(a):

Czyli zamiast tworzyć input i podawanie wartości to tworze od razu obiekt z danymi i daje go do funkcji i później sprawdzam czy działa?

Poczytaj o Postmanie. Uderzasz w nim pod endpointy, czyli w uproszczeniu metody swojego kontrolera. To co dalej się dzieje, to już zależy od tego pod jaki endpoint uderzasz i czego Twoje API oczekuej w requeście. Może to być GET bez żadnych parametrów, może być też POST, który wymaga jakiegoś inputu. Ideą jest to, że nie potrzebujesz stawiać frontendu, który będzie wołał coś z Twojego API, tylko będziesz sobie tam uderzał bezpośrednio z Postmana.

2

Jesli nic nie zrozumiales to istnieje duza szansa (bez zlosliwosci), ze powinienes najpierw porzadnie nauczyc sie podstaw zanim wezmiesz sie za takie "magiczne" frameworki jak spring. — Seken dziś, 12:20

Mało mi o tobie wiadomo, ale mi by się chciało ciebie zaliczyć do tych, co za szybko biora Springa, bez MOCNYCH podstaw, bo kasa kasa kasa — AnyKtokolwiek dziś, 12:19

Może do końca roku opanuję tą czarną magię — LukaszCh233 dziś, 14:24

W miarę rozwoju wątku jestem przekonany, że dla ciebie nie pora na Springa, a wiele wiele rozwoju w Javie, uruchamianie, kombinowanie co-jeśli, zarządzanie coraz wiekszymi projetami, popsucie wielu i wyjście z kłopotu itd.

W drugim etapie: orientacyjne zapoznanie z reflekscją, popularyzatorska wiedza o aspektach.

Wiem że są (nie tylko) juniorzy którzy w pocie czoła potrafią użyć Springa sr...ąc adnotacjami bez zrozumienia, i ciemny grób jak wyjdzie problem.
To jak plywanie, albo gra na instrumencie: lepiej się nie czuć wcale, niz uczyć źle.

A nauka magii SPring Data/ JPA (gdzie te czary sie odbywają) bez rzetelnego oswojenia z standardem JPA to najwyżej poziom murzynka z otwarta gębą.

Aha, dla reszty kolegów. Moje zdanie o technologiach nie będących wprost "pod etat", jak rzucony przeze mnie Spring MVC. Trzeba wiele "zmarnować" w cudzysłowie, bo to nie jest marnowanie, tylko gimnastyka dla neuronów "aha tam było tak, a tu jest tak". Uczenie sie zupełnie bez ciekawości co jest w sąsiedniej wiosce, tylko pod pańszczyznę u lokalnego pana wg mnie jest na "nie"
Realny użyteczny prograsmista nabył doświadczenie z wieloma technologiami, a nie tylko z tym wąskim zakresem, za które bierze wynagrodzenie w obecniej pracy.

0

Jednak spróbuję tego springa mimo twojego zdania, początki nie są łatwe. Wiedzę, zawsze mogę uzupełniać a na kasie mi nie zależy, bardziej na pierwszej pracy w której będę mógł się rozwijać na pełen etat i zdobywać doświadczenie od ludzi.

0

Jeśli twoja aplikacja wystawia endpointy to ja polecam testy integracyjne po http. Tylko nie wiem ktora biblioteka w springu jest od tego Bo dawno tego springa nie uzywalem

1

A ja polecę ci (o zgrozo) ogarnięcie podstaw jakiegoś frameworka/biblioteki JavaScript typu React albo Vue (albo cokolwiek), w czym mógłbyś zrobić zupełnie podstawowy frontend do twojego API. Do testowania API jak najbardziej wystarcza Postman albo nawet curl (choć wtedy to już lepiej httpie - lepszy), ale jeśli chcesz "poklikać po apce" albo pokazać mamie, to warto to umieć. Dorzuć jakiś framework CSS typu Bootstrap (czy to jeszcze modne? pewnie nie xD) żeby nie pieprzyć się z CSS. Twoje błędne podejście być może wynika trochę z myślenia pokroju starego PHP, że piszemy logikę i tworzymy HTML w jednym miejscu. we_dont_do_that_here.jpg :)

2

Źródełko z łatwym hajsem, o którym piszą tyle w Internecie wysycha od miesięcy
Dla wannabe juniorów z wiedzą na poziomie tutoriala rynek się już skończył, zainteresuj się czymś innym skoro nawet po 30 min kursu Springa nie możesz się skupić xD

1

Mimo iż nie czuję się upoważniony aby dawać rady (ledwo 13 miesięcy uczę się programowania od zera), to mogę stwierdzić jasno: nie ma nic lepszego niż rozkminianie dobrego kodu starego wyjadacza. 50h dobrego kursu absolutnie nie jest stratą czasu jeśli kod przepisujesz, brakujące informacje doszukujesz, ostatecznie go rozumujesz...capito? Co istotne. Bierz kursy dobre, niskopoziomowe, od starych doświadczonych inżynierów, bo klepanie kodu bez jego rozumienia jest jak rozwiązywanie zadań z matematyki na pamięć. Coś nie spasuje i jesteś w czarnej dupie bo nawet nie wiesz gdzie szukać rozwiązania ( a jak już znajdziesz to Cie przerośnie i pokaże kolejnych 10 drzwi z pytajnikiem). Dobry inżynier wie co sie da i wie gdzie szukać. W moim przypadku było to czytanie wielu dobrych źródeł i przerobienie wielu dobrych kursów. Świetne kursy o refleksji , współbieżności, architekturze, systemach rozproszonych ma Michael Pogrebinksy na Udemy (architekt googla, kondensacja wiedzy w kursie na poziomie gęstości gwiazdy neutronowej - nie znalazłem w żadnym z nich zbędnego zdania), streamy, lambdy, crud w czystej javie (taki jak zaimplementowany w Springu) Terry Martin (80 godzin ;), generyki Angelika Lagner. dobry kod to Bob Martin (już nie pamiętam już w której jego książce) gdzie pisze jak byk : dobry programista nie powiniec się cieszyć że coś działa tylko wiedzieć dlaczego działa.

0
LukaszCh233 napisał(a):

Nie potrafię zrozumieć jak mogę się poruszać po projekcie bez frontendu. Czy jest konieczne napisanie go, żeby móc się poruszać i sprawdzać działanie jak np w projekcie konsolowym?

Najlepiej to robić testami automatycznymi.

0
Riddle napisał(a):
LukaszCh233 napisał(a):

Nie potrafię zrozumieć jak mogę się poruszać po projekcie bez frontendu. Czy jest konieczne napisanie go, żeby móc się poruszać i sprawdzać działanie jak np w projekcie konsolowym?

Najlepiej to robić testami automatycznymi.

A który sposób najlepiej wybrać?

0
LukaszCh233 napisał(a):
Riddle napisał(a):
LukaszCh233 napisał(a):

Nie potrafię zrozumieć jak mogę się poruszać po projekcie bez frontendu. Czy jest konieczne napisanie go, żeby móc się poruszać i sprawdzać działanie jak np w projekcie konsolowym?

Najlepiej to robić testami automatycznymi.

A który sposób najlepiej wybrać?

Jak to "sposób"?

Ludzie korzystają ze springa głównie po to żeby wystawić interfejs HTTP (pod API albo jakiegoś klienta). Napisz więc testy automatyczne pod ten interfejs, i sprawdzaj czy dla danych inputów masz dany output.

0
LukaszCh233 napisał(a):
Riddle napisał(a):
LukaszCh233 napisał(a):

Nie potrafię zrozumieć jak mogę się poruszać po projekcie bez frontendu. Czy jest konieczne napisanie go, żeby móc się poruszać i sprawdzać działanie jak np w projekcie konsolowym?

Najlepiej to robić testami automatycznymi.

A który sposób najlepiej wybrać?

Uzyliście odmiennych sensów słów "poruszać".

Testy jako potwierdzenie PRZEMYŚLANEGO (fragmentu) projektu tak
Ale jak autor oswaja technologię i nie wie, co mu wyjdzie - nawet testu nie zaplanuje.

0
Riddle napisał(a):
LukaszCh233 napisał(a):
Riddle napisał(a):
LukaszCh233 napisał(a):

Nie potrafię zrozumieć jak mogę się poruszać po projekcie bez frontendu. Czy jest konieczne napisanie go, żeby móc się poruszać i sprawdzać działanie jak np w projekcie konsolowym?

Najlepiej to robić testami automatycznymi.

A który sposób najlepiej wybrać?

Jak to "sposób"?

Ludzie korzystają ze springa głównie po to żeby wystawić interfejs HTTP (pod API albo jakiegoś klienta). Napisz więc testy automatyczne pod ten interfejs, i sprawdzaj czy dla danych inputów masz dany output.

Czyli robię to za pomocą postmana? Bo jest sporo narzędzi do wyboru.

0

Rozumiem to tak, że w teście podaje co chce uzyskać i sprawdzam, czy to się dzieje. Tworze obiekt wywołuje metodę i sprawdzam czy wynik jest taki jaki chciałem. — LukaszCh233

Z waznym zastzrezeniem. "tworze obiekt i wywołuje metode" jak w javie SE to jedno, a wykonanie tego w kontenerze (springowym w tym przypadku) z injekcją, aspektami itd to trochę inna bajka

0

Wiem że chcecie dobrze proponując testy, ale tylko mieszacie OPowi w głowie, który po tym wątku będzie jeszcze mniej wiedział niż wie, a fakt że zapytał

A który sposób najlepiej wybrać?
Bo jest sporo narzędzi do wyboru.

bez próby nawet pogooglowania jakie są możliwe rozwiązania, źle wróży na przyszłość. @LukaszCh233 - nagana.

OP - daj sobie na razie spokój z testami. Zrób aplikację, która na zapytanie (z przeglądarki! nie trzeba innych narzędzi niż twoje IDE) GET http://localhost:8080/add?a=123&b=456 wypluje w odpowiedzi sumę tych dwóch liczb. Będziesz "poruszać się po aplikacji" edytując URL w pasku adresu. Jak to będzie działać, to wróć tutaj, pokaż kod - pomożemy, na pewno ktoś cię tutaj nakieruje.

I wg mnie nieistotne, ile czasu ci to zajmie za pierwszym razem. Ale oczekiwałbym od juniora, że taki uber prosty projekt z jednym endpointem, będzie w stanie napisać w nie wiem, 15 minut? Może warto skonfrontować się z rzeczywistością :)

0

chodzi o coś takiego?

@GetMapping("/add")
public int addNumbers(@RequestParam int a,@RequestParam int b) {
  int sum = a + b;
  return sum;
}
0
AnyKtokolwiek napisał(a):

Testy jako potwierdzenie PRZEMYŚLANEGO (fragmentu) projektu tak
Ale jak autor oswaja technologię i nie wie, co mu wyjdzie - nawet testu nie zaplanuje.

Jeśli przeczytałbyś książkę Kenta Becka pod tytułem "Development driven by tests. By example", to wiedziałbyś że testy to jest dobry sposób na wytwarzanie oprogramowania, nawet kiedy nie wiesz do końca co tworzysz. Kent opisuje to w swojej książce jako "teacher test".

1

Hej myślę, że coś już ogarnąłem jeśli chodzi o takie podstawy aplikacji typu CRUD, do sprawdzania używam Postmana i zrozumiałem jak poruszać po aplikacji z samym backendem. Raczej nie ma co oceniać bo to zwykłe crud ale podsyłam żeby było, że coś robiłem. Problem mam chyba największy z plikiem properites nigdy nie wiem co tam wpisać dokładnie.

https://github.com/LukaszCh233/Spring_boot_exercise

0

Fajnie że coś zrobiłeś i to Tobie działa, na tym się najwięcej nauczysz. Nie odpalam tego, ale to co widzę, to po kolei:

  1. Czemu DatabaseController? Raczej miałeś na myśli BookController jeśli już. Spring nie zwraca szczególnej uwagi na nazwy klas, ale ludzie owszem.

  2. Patrząc dalej na ten sam plik, masz bardzo niekonsekwentny whitespace. Czasem między metodami masz puste linie, czasem w środku masz puste, w jednym miejscu masz jakąś przypadkową spację. Używaj reformatowania kodu w twoim IDE.

  3. Skoro mowa o formatowaniu, to jest niespójne z plikiem BooksStoreApplication bo tam masz taby, chyba tak generuje start.spring.io ale to Twoje zadanie to poprawić.

  4. Nie wiem jak twoją aplikację w ogóle uruchomić. Domyślam się z pom.xml że trzeba jakiegoś MySQL, ale czemu mam się domyślać? Skasuj plik HELP.md (bo to jakiś domyślny śmieć) i napisz nam w typowym README.md jak to uruchomić.

  5. Skoro mowa o uruchomieniu, zastanów się, czy nie warto by w domyślnej konfiguracji uruchamiać aplikacji z bazą H2 in-memory. Wtedy w pliku application.properties wpisujesz propsy bazodanowe do H2 i ja nie muszę mieć MySQL.

  6. W tym pliku properties spokojnie możesz wpisać server.port=8080 bo nie wiem czemu zostawiłeś puste. Jeśli ktoś będzie miał konflikt to sobie zmieni.

  7. W DatabaseController importujesz ArrayList ale nigdzie nie używasz - brzydko. Używaj funkcji w twoim IDE do czyszczenia nieużywanych importów.

  8. Jeśli decydujesz się używać Lomboka (IMO okej) to użyj go też w kontrolerze, żeby pozbyć się ręcznego przypisywania serwisu.

  9. Nitpick, ale ceny lepiej nie wyrażać poprzez double, bo potem dziwne przecinki wychodzą.

  10. Czy książka z title = null jest poprawna? Pomyśl o walidacji danych, zarówno na wejściu, jak i w bazie danych na constraintach.

  11. Pole idBook zmieniłbym na po prostu id - ciężko żeby było id czego innego :)

  12. Testy :)

  13. Nie commituj pliku .iml

  14. W pom.xml dalej wisi example demo cośtam - zmień ładnie na nazwę projektu.

Zupełnie pomijam teraz mieszanie warstw, encje na froncie itp. - na razie zajmij się prostymi poprawkami.

0

@kelog: Znaczy to nie jest jakiś projekt który bedzie w githubie. Skupiłem się tu na działaniu tego i nie formatowałem kodu mimo, że o tym wiem. Też nie pisałem readme bo po prostu zależało mi na tym żeby ktoś zerknął na metody które są proste i bez uruchamiania doświadczone osoby powiedzą czy jest git. To takie małe ćwiczenie po prostu bez przywiązywania uwagi do takich szczegółów.

0

Hej powiem mi ktoś czemu zwraca mi pustą liste?

@Query("SELECT b FROM Book b WHERE b.title LIKE %:partialTitle%")
List<Book> findByPartialTitle(@Param("partialTitle") String partialTitle)
@GetMapping("/booksSearch/{partialTitle}")
public List<Book> getBooksByPartialTitle(@PathVariable String partialTitle) {
    return bookRepository.findByPartialTitle(partialTitle);
}

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.