W tym rozdziale znajdziesz 1 film (materiał premium).
Zaczynamy! Na początek krótki wstęp o tym, jak wygląda nasz projekt i czego możesz się spodziewać.
Aplikacja jest jednym projektem Spring Boot w wersji 2.x.x (oraz 3.x.x) i jest on gotowy na Javę 17 (wymaga minimum wersji 8 dla Spring Boot 2.x.x oraz wersji 17 dla Spring Boot 3). Każda funkcjonalność
(rejestracja użytkownika,
Moje konto, logowanie itd.) stanowi wyodrębniony zestaw klas w dedykowanym pakiecie.
Dzięki temu projekt może być łatwo rozszerzany o nowe funkcjonalności,
a modyfikacja obecnych nie wymaga przebudowy aplikacji w innych miejscach.
Wyjątkiem od tej reguły są części wspólne, używane przez wszystkie lub kilka modułów (części wspólne znajdują się w pakiecie i folderze
application i będziemy o nich mówić za chwilę).
Projekt jest przygotowany do pracy zarówno z IDE Eclipse, jak i IntelliJ.
Pamiętaj, że najpierw musisz mieć zainstalowanego i skonfigurowanego Mavena.
W razie czego polecamy nasz darmowy starter w postaci poniższych linków:
Struktura projektu z częściowo rozwiniętymi pakietami i folderami wygląda tak, jak na zdjęciu poniżej
(w sumie przygotowanych zostało aż 129 klas, stąd spora część pozostaje zwinięta na zdjęciu):
Drogowskaz.
Jak widzisz struktura naszego projektu startappa-spring-boot, jest zgodna z typowym projektem Spring Boot. Dokładne wyjaśnienie wszystkich elementów
takiego projektu znajdziesz w naszej bazie wiedzy w rozdziale Spring Boot - Projekt startowy.
Projekty startappa-spring-boot i startappa-angular to obecnie dwa Mavenowe moduły tworzące jedną aplikację startappa-light.
Modułowość opisujemy w rozdziale Uruchomienie frontendu i backendu
w paragrafie Zawartość katalogu z aplikacją.
Uwagi dodatkowe do powyższego zdjęcia.
Elementy powiązane tematycznie między backendem a frontendem zostały oznaczone tymi samymi kolorami (kolorowe kwadraty przed nazwami).
Domena aplikacji
W pakiecie
application znajdują się klasy Java, które należą do domeny projektu.
To na nich opiera się działanie całej aplikacji, one są jej centralną częścią, wokół której wszystko się kręci.
Oto jak wygląda pakiet klas encyjnych (domenowych) naszej aplikacji:
W celu uproszczenia nauki Springa i Hibernate'a postanowiliśmy, że w przeciwieństwie do klas serwisów i kontrolerów powyższe encje domenowe
będą współdzielone i publiczne, ponieważ tak naprawdę duża część z wydzielonych zagadnień biznesowych operuje na większości z tych klas.
Podpowiedź.
Domena aplikacji - Zbiór nazwanych elementów aplikacji, które razem tworzą obszar jej działań. Najczęściej domenę
tworzą podmioty występujące w rzeczywistości. Wśród nich można wyodrębnić motyw przewodni.
W naszej aplikacji jest to element (Item). Natomiast w aplikacji do obsługi VOD (Video On Demand) będzie to film (Movie), a w aplikacji
do zarządzania dokumentami - dokument (Document).
Każdy system niezależnie od tego, czy jego motywem przewodnim jest wydarzenia muzyczne, bilet na mecz, czy produkt,
operuje w ramach określonej domeny.
Dobrze jest nie przywiązywać się w trakcie nauki tylko do jednego obszaru (wspomnianych filmów albo wydarzeń sportowych).
Z tego powodu nasza aplikacja operuje na ogólnym pojęciu - element (z ang. item), dzięki czemu jest idealnym wzorcem do tworzenia dowolnych rodzajów aplikacji.
Podstawiając pod item inne słowo, podstawowe zasady działania nie zmieniają się prawie wcale. Dlaczego? Bo te słowa to tylko nazwy obiektów z danej dziedziny życia.
Ważne są relacje, które zachodzą między tymi obiektami.
Na przykład film, tak jak nasze itemy, należy do konkretnej kategorii (gatunku - komedia, fantastyka, dramat) lub typu (serial, pełnometrażowy, animowany).
Może mieć też status ("W przygotowaniu", "W dystrybucji", "Premiera"), jak również dowolne atrybuty (na przykład nagrody - "Oscar", "Złoty Glob", "BAFTA").
Tak więc, jak będą wyglądać nazwy klas w aplikacji VOD?
Item to może być
Movie
Category to będzie pewnie
MovieGenre - (komedia, fantastyka, dramat)
Type nazwiemy pewnie
MovieType - (serial, pełnometrażowy, animowany)
Status to precyzyjniej ujmując
MovieStatus - ("W przygotowaniu", "W dystrybucji", "Premiera")
Attribute to może być na przykład
MovieAward - ("Oscar", "Złoty Glob", "BAFTA")
A jak to będzie wyglądać w przypadku aplikacji do zarządzania dokumentami?
Item to będzie
Document
Category to zwykle jest po prostu
DocumentCategory - (faktura, rachunek, umowa, świadectwo, wniosek)
Type nazwiemy pewnie podobnie, czyli
DocumentType - (PDF, Word, Excel)
Status to raczej też będzie
Status - ("Przyjęty", "Zatwierdzony", "Wydany", "Odrzucony")
Attribute to może być na przykład
Attribute - ("Oryginał", "Kopia", "Priorytetowy", "Wymagający akceptacji")
Drogowskaz.
Od tego miejsca przedstawiamy tylko zajawki kolejnych paragrafów, które znajdują się w tym rozdziale w wersji płatnej.
Jesteśmy transparentni, dlatego staramy się pokazać jak najwięcej informacji o tym kursie, ponieważ zależy nam, abyś
za darmo dowiedział(a) się, jakiej jakości możesz się u nas spodziewać.
W przypadku dokumentów mamy jeszcze załączniki. Tylko że w zasadzie taki załącznik to zwykle też dokument, tyle że podpinany pod inny dokument.
Zasadniczą kwestią jest to, że taki dokument może mieć wiele podpiętych załączników.
Natomiast taka relacja
...
Jak to wszystko działa?
Na tym etapie zakładamy, że mniej więcej orientujesz się, jaki jest ogólny schemat działania aplikacji webowych.
Natomiast na wszelki wypadek przypomnimy parę kwestii, tak na rozgrzewkę.
Wszystko zaczyna się w rozdziale
Spring Boot - Aplikacja Webowa.
Tam przedstawiamy ogólny zarys tego, co jest czym jeśli chodzi o technologie oraz infrastrukturę.
To, na czym skupimy się teraz, jest częścią wspomnianego rozdziału i bardzo mocno będzie związane z tym kursem.
Przypomnijmy zatem, że jeśli mamy przeglądarkę, z której korzysta użytkownik, to tak naprawdę tam zaczyna się już aplikacja webowa, w tej przeglądarce.
Tam znajduje się tak zwany frontend.
Druga część aplikacji webowej znajduje się po stronie serwera i jest to nazywane backendem.
Frontend komunikuje się (wymienia dane) z backendem poprzez protokół http
...
Spring Boot
Wracamy do Spring Boota. Co nam daje zastosowanie tego rozwiązania? Przede wszystkim otrzymujemy szablon projektu, który poprzez dodanie odpowiednich zależności w pliku
pom.xml
Mavena pozwala nam na wystartowanie "pustej" aplikacji. Prawdziwym hitem jest to, że razem ze Spring Bootem dostajemy wbudowanego Tomcata
...
Struktura backendu aplikacji
Zgodnie z dobrymi praktykami w backendzie na Springu powinniśmy dla każdej funkcjonalności utworzyć trzy warstwy
- Warstwę kontrolerów (przyjmują requesty http i wysyłają odpowiedzi http) - zwykle w tym celu tworzymy pakiet ...
...
Przepływ danych w aplikacji
Przepływ danych w aplikacji to z angielskiego tak zwany
flow. I właśnie o tym chcemy zająć się w tym krótkim paragrafie.
W zasadzie większość zadań typowej aplikacji można przedstawić jako ciąg następujących wywołań w kodzie (tworzącego
flow)
...
...
Podpowiedź.
Trochę się tu powtórzymy, ale to jest bardzo ważny moment w kursie, który musisz dobrze zrozumieć.
Kontrolery, serwisy i repozytoria są reprezentowane przez klasy w Javie.
Tak więc, jeśli mamy na przykład proces rejestracji użytkownika, tworzymy wtedy:
-
Kontroler - UserController
-
Serwis - UserService (interfejs) oraz UserServiceImpl (klasa implementująca interfejs UserService)
-
Repozytorium - UserRepository rozszerzający interfejs, który pochodzi ze Springa - JPARepository
Wstrzykiwanie zależności
Po otrzymaniu requesta http przenoszącego dane w formacie JSON Spring przekształca JSON-a na obiekt Java. Dzięki temu
dane wysłane z przeglądarki (na przykład z formularza) "magicznie" stają się obiektem, którego możemy wykorzystać
w dowolny sposób. Najczęściej w kontrolerze robimy tylko tyle, że bierzemy ten obiekt i uruchamiamy metodę serwisu.
Pytanie, skąd tam pojawia się obiekt serwisu? Serwis znajduje się w polu, ponieważ Spring wstrzyknął go tam w trakcie
startu Tomcata (konkretnie podczas inicjalizacji kontenera Springa). Tak samo później w klasie serwisu
mamy dostęp do obiektu repozytorium, ponieważ został on tam wstrzyknięty.
W kodzie rejestracji użytkownika, który będziemy omawiać w następnych dwóch rozdziałach, zobaczysz dokładnie to, o czym tu piszemy.
Pokażemy Ci, gdzie request http jest przechwytywany i co dalej dzieje się z obiektem, który z niego powstał.
Dowiesz się, gdzie następuje zapis do bazy i co robimy dalej, aby przeglądarka dostała odpowiedź.
Drogowskaz.
Nie wiesz, jak działa wstrzykiwanie w Springu? W takim razie udaj się teraz do naszego Kursu Spring do rozdziału
Spring - Wstrzykiwanie zależności - część 1.
Natomiast, jeśli czujesz, że nie do końca jeszcze rozumiesz ideę kontenera Springa, to znaczy, że potrzebujesz wrócić do rozdziału
Beany i stereotypy.
Przygotowanie danych początkowych (słownikowych)
W ramach pakietu application znajduje się pakiet
service, a w nim klasa (z interfejsem), która służy nam do zainicjowania
danych początkowych w aplikacji. Dane te, nazywane też słownikowymi są wprowadzane do bazy raz
...