Spring framework
Spring to aktualnie najbardziej popularny framework w ekosystemie Javy. Powstał w 2003 roku jako odpowiedź na wczesne wersje specyfikacji Java EE. Od samego początku promował najlepsze praktyki, prowadzące do testowalnego i jakościowego kodu. Dziś to dojrzałe i dopracowane rozwiązanie, oferujące kompleksowy model wytwarzania aplikacji dowolnego typu. Ponadto zapewnia łatwą integrację z najbardziej popularnymi technologiami.
00:38
Ucząc się nowego frameworka, warto poznać nie tylko jego możliwości, ale także architekturę, sposób działania i najważniejsze założenia. Od początku istnienia Spring stawiał na wysoką jakość kodu przez promowanie wstrzykiwania zależności, programowania aspektowego, wykorzystania interfejsów czy stosowanie wzorców projektowych. Takie podejście prowadzi nie tylko do czystego i testowalnego kodu, ale także ułatwia jego utrzymanie w dłuższej perspektywie czasowej. API oferowane przez Spring jest dobrze zaprojektowane i bardzo intuicyjne. Jego twórcy starają się zachować maksymalną kompatybilność wsteczną, przy jednoczesnym wprowadzaniu nowości z kolejnych wersji Javy.
01:18
Spring to wszechstronne i bardzo rozbudowane rozwiązanie. Obejmuje między innymi kontener realizujący wstrzykiwanie zależności, mechanizmy umożliwiające programowanie aspektowe, moduły pozwalające na dostęp do różnego rodzaju baz danych, tworzenie aplikacji webowych, usług restowych czy integrację z zewnętrznymi rozwiązaniami. Dzięki temu, że Spring jest modułowy, budując aplikację, możemy wybrać te elementy frameworka, które są nam naprawdę potrzebne. W czasie kursu poznamy najważniejsze z nich i nauczymy się z nich korzystać.
01:50
Używając Spring framework, z założenia tworzymy bardziej jakościowy kod. Dzięki programowaniu z użyciem interfejsów oraz wstrzykiwaniu zależności uzyskujemy niskie sprzężenie między komponentami aplikacji. To z kolei przekłada się na możliwość łatwej wymiany implementacji oraz bezproblemowe tworzenie testów jednostkowych. Programowanie aspektowe umożliwia odseparowanie logiki biznesowej od logiki pobocznej dotyczącej np. logowania, transakcji czy bezpieczeństwa. W rezultacie kod biznesowy jest spójny i zgodny z zasadą pojedynczej odpowiedzialności. Korzystając z API Springa, często dostrzeżemy także popularne wzorce projektowe.
02:28
Interfejs to sposób na zdefiniowanie kontraktu między współpracującymi komponentami. Jest on na tyle istotny, że wiele języków, w tym Java definiuje go jako natywny element. Metody na poziomie interfejsu określają możliwe sposoby interakcji, innymi słowy stanowią publiczne API danego typu. Dzięki wykorzystaniu interfejsów możemy odizolować współpracujące komponenty, a to zapewnia niezależność od konkretnej implementacji i ułatwia jej wymianę.
02:55
Bezpośrednie wykorzystanie operatora new do tworzenia zależności komponentów może prowadzić do silnych sprzężeń, a w konsekwencji do kodu trudnego w utrzymaniu i testowaniu. Możemy rozwiązać ten problem, tworząc i konfigurując je na zewnątrz, a następnie podając przez konstruktor lub metody. Zmniejsza to występujące sprzężenie, a także prowadzi do lepszego podziału odpowiedzialności. Aplikacje oparte o Spring framework wykorzystują kontener IoC jako implementację tego mechanizmu. Kontener odpowiada za tworzenie, konfigurowanie i zarządzanie cyklem życia komponentów (beans).
03:30
Koncepcja wzorców projektowych pochodzi od architekta o imieniu Christopher Alexander, który zaproponował wykorzystanie języka wzorców w klasycznej architekturze. Wzorzec to szablon sprawdzonego, a zarazem najlepszego rozwiązania, określonego problemu. Te związane z programowaniem obiektowym zostały opisane w „Design Patterns Elements of Reusable Object-Oriented Software” przez Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides tzw. bandę czworga (GOF). Na poziomie Springa możemy spotkać wiele z nich między innymi:
04:09
Umożliwia utworzenie obiektu zastępczego lub pośredniego dla innego obiektu. Pozwala kontrolować dostęp do oryginalnego obiektu oraz opakowywać wołaną metodę dodatkową logiką.
04:23
Paradygmat pozwalający odseparować logikę biznesową od funkcjonalności pobocznych tzw. cross-cutting concerns. Logika poboczna np. związana z logowaniem zamykana jest w ramach specjalnych klas nazywanych aspektami, a następnie deklaratywnie aplikowana na poziomie wybranych metod komponentów (bez konieczności modyfikowania kodu źródłowego). Najczęściej realizacja tego mechanizmu oparta jest o wzorzec projektowy Proxy. Programowanie aspektowe przekłada się na lepszą czytelności i spójność kodu, a także zmniejsza koszty jego utrzymania i modyfikacji.