JavaSenior
JavaSenior
  • 53
  • 32 384
GitHub Copilot w IntelliJ IDEA
Mówi się, że leniwy programista to dobry programista 😉. Chodzi oczywiście o unikanie żmudnej pracy, którą można łatwo zautomatyzować. W dzisiejszych czasach mamy wiele narzędzi, które mogą pomóc nam w takich zadaniach podczas tworzenia oprogramowania. Dlatego warto z nich korzystać, a jednym z nich jest Copilot 🤖
📜 Spis:
00:00 - Wstęp
00:38 - Autouzupełnianie
05:15 - Generowanie dokumentacji i wyjaśnianie metod
05:54 - Generowanie testów
09:41 - Korzystanie z wielu klas do udzielenia odpowiedzi
12:19 - Podsumowanie
🌐 LINKI:
📚 BLOG: javasenior.pl
💻 GITHUB: github.com/arturlaskowski
🏷️ HASHTAGI:
#ai #copilot #java #spring #programowanie #it
zhlédnutí: 1 084

Video

ArchUnit: Testy architektury
zhlédnutí 536Před měsícem
Strukturyzując nasz kod, często decydujemy się oddzielić od siebie niektóre komponenty, tak aby były od siebie niezależne. 🤔 Jak jednak zautomatyzować sprawdzanie tych reguł? W tym mogą pomóc testy architektury! 🛠️ 📜 Spis: 00:00 - Wstęp 01:37 - Moduły Mavenowe 02:40 - ArchUnit 05:43 - ArchUnit vs Moduły Mavenowe 09:43 - Podsumowanie 🌐 LINKI: 📚 BLOG: javasenior.pl 💻 GITHUB: github.com/arturlasko...
CORS: Pakt między backend a frontend!
zhlédnutí 3,3KPřed 2 měsíci
Tworząc aplikację, gdzie mamy osobno frontend i backend. Musimy skonfigurować nasz serwer tak, żeby przeglądarka wiedziała, że może wczytywać dane pochodzące z naszego backendu na stronę tworzoną przez frontend. Do tego celu służy mechanizm CORS 🔒🔑 📜 Spis: 00:00 - Same-origin policy - teoria 02:56 - Same-origin policy - praktyka 04:18 - Cross-Origin Resource Sharing - teoria 06:17 - Cross-Origi...
Zarządzanie Dostępem: Pessimistic vs Optimistic Locking
zhlédnutí 1,1KPřed 2 měsíci
Projektując nasze aplikacje, warto zabezpieczyć się przed scenariuszem, w którym dwa procesy próbują jednocześnie zmodyfikować ten sam zasób. W tym celu możemy wykorzystać blokowanie pesymistyczne lub blokowanie optymistyczne. Każde z tych podejść ma swoje wady i zalety 📜 Spis: 00:00 - Problem 02:13 - Blokowanie pesymistyczne 04:28 - Blokowanie pesymistyczne - deadlock 06:43 - Blokowanie optymi...
Testy bez dotykania I/O: Benefit architektury portów i adapterów
zhlédnutí 848Před 3 měsíci
Mając w aplikacji bogatą logikę biznesową, chcielibyśmy móc testować ją jak najszybciej, niezależnie od innych warstw oraz punktów wejścia i wyjścia naszej aplikacji. Żeby osiągnąć ten cel, może nam pomóc idea portów i adapterów! 📜 Spis: 00:00 - Wstęp 01:34 - Przedstawienie aplikacji 04:42 - Odwrócenie zależności 07:02 - Adapter na potrzeby testów 11:53 - Adapter w kodzie źródłowym 14:02 - Pods...
Architektura Heksagonalna | Porty i Adaptery w 2 min!
zhlédnutí 857Před 3 měsíci
Architektura heksagonalna, znana również jako porty i adaptery, to podejście, które ułatwia rozwijanie projektów z bogatą domeną. W tym filmiku postaram się wyjaśnić jej główne założenia w ciągu 2 minut! 🌐 LINKI: 📚 BLOG: javasenior.pl/architektura-portow-i-adapterow-heksagonalna 💻 GITHUB: github.com/arturlaskowski/bigos-app 🏷️ HASHTAGI: #java #spring #programowanie #it #cleanarchitecture
Senior Java Developer Test: Porównanie GPT 3.5 vs GPT 4
zhlédnutí 2,2KPřed 3 měsíci
W tym wideo sprawdzam, jak ChatGPT poradzi sobie z pytaniami przeznaczonymi dla Senior Java Developera! Ty też sprawdź się swoją wiedzę z zakresu Senior Java Developer: www.udemy.com/course/senior-java-developer-quiz/?couponCode=EB77F26E54036DA55B73 📜 Spis: 00:00 - Wstęp 00:58 - Pytania otwarte 04:29 - Pytania zamknięte 10:19 - Podsumowanie 🌐 LINKI: 📚 BLOG: javasenior.pl 💻 GITHUB: github.com/ar...
Value Object: I twój kodzik jest piękniejszy!
zhlédnutí 2,1KPřed 4 měsíci
Niektóre wzorce są proste do użycia, ale mogą znacznie poprawić jakość naszego kodziku. Takim właśnie wzorcem jest Value Object 💻 Wpis na blogu o Value Object: javasenior.pl/value-object/ 📜 Spis: 00:00 - Czym jest Value Object? 03:05 - Persystencja Value Object 04:18 - Jaki problemy rozwiązuje Value Object? 10:08 - Value Object vs Encja 11:41 - Podsumowanie 🌐 LINKI: 📚 BLOG: javasenior.pl 💻 GITH...
Spring AI: Aplikacja Doradca Kulinarny w 5 min
zhlédnutí 1,6KPřed 4 měsíci
Spring AI to nowy projekt od Springa, który aktualnie jest rozwijany, ale w przyszłości będzie pomagał nam, Javowcom, tworzyć aplikacje z wykorzystaniem AI. Więc dobrze wiedzieć, co tam Spring kombinuje! 📜 Spis: 00:00 - Czym jest Spring AI? 01:37 - Implementacja aplikacji kulinarnej 08:53 - Prezentacja aplikacji kulinarnej 11:30 - Podsumowanko 🌐 LINKI: 📚 BLOG: javasenior.pl 💻 GITHUB: github.com...
Kohezja i Coupling
zhlédnutí 1KPřed 5 měsíci
Kohezja i Coupling
Niejednoznaczność zasad programowania
zhlédnutí 749Před 6 měsíci
Niejednoznaczność zasad programowania
Testcontainers: Docker w testach integracyjnych
zhlédnutí 593Před 7 měsíci
Testcontainers: Docker w testach integracyjnych
Outbox Pattern (Wzorzec Outbox)
zhlédnutí 519Před 7 měsíci
Outbox Pattern (Wzorzec Outbox)
Java 21 Nowości
zhlédnutí 1,5KPřed 7 měsíci
Java 21 Nowości
Saga Pattern (Wzorzec Saga)
zhlédnutí 2,1KPřed 8 měsíci
Saga Pattern (Wzorzec Saga)
Command vs Event
zhlédnutí 801Před 8 měsíci
Command vs Event

Komentáře

  • @marcinb7578
    @marcinb7578 Před 23 dny

    Mi osobiście analiza tego co proponuje AI zajmuje więcej czasu niż zakodowanie tego samemu (tj. szybkość mojego klikania w klawiaturę, poruszania się po pliku czy IDE, wsparcie od IDE). Co więcej jak samemu koduję to czuję jak mój mózg pracuje - mam otwarte kilka wątków w głowie (tzn. myślę nad tym co aktualnie koduje, nad tym co za chwilę zakoduję i i nad tym co jeszcze potem zakoduje). Zaś dostając gotowy kod od IDE to programista po prostu sprawdza czy ta konkretna próbka kodu jest poprawnie napisana. To coś analogicznego jak kartkówka w szkole - to uczeń (AI) rozwiązuje problemy, a nauczyciel (programista) tylko sprawdza czy rozwiązanie zastosowane przez ucznia jest prawidłowe. Albo taki przykład: jesteś inżynierem, który projektuje jak samochody mają jeździć vs jesteś kontrolerem jakości czy dana sztuka samochodu poprawnie jeździ.

    • @javaseniorpl
      @javaseniorpl Před 22 dny

      Jak najbardziej rozumiem, sam też mam tak, że czasami takie narzędzie bardziej przeszkadza niż pomaga i je wyłączam. Czasami jednak dostaję propozycję dokładnie taką, jakiej oczekiwałem, i wtedy wystarczy nacisnąć tab, wtedy przyspiesza. Dochodzą też preferencje, bo jedni wolą skrzynię automatyczną, a drudzy wolą sami zmieniać biegi. Każdy będzie bronił swojej racji. :D Podsumowując, warto przetestować i zobaczyć, czy to coś dla mnie. Jeśli nie, to wyłączyć i spróbować ponownie za pół roku czy rok, kiedy narzędzia te będą jeszcze bardziej rozwinięte. Wtedy może pojawią się możliwości bardziej zaawansowanych customizacji ustawień i każdy będzie mógł je dostosować do siebie 😄

  • @marianjanuszpazdzioch6177

    skąd się uczyłeś tego wszystkiego co umiesz? Dopiero zdobywam doświadczenie zawodowe w pracy po studiach.

    • @javaseniorpl
      @javaseniorpl Před 25 dny

      Ja zacząłem pracę komercyjną ponad 8 lat temu, kiedy to był okres, że jeśli nie "zabijałeś się" klawiaturą, to znaczyło, że nadajesz się do pracy (duże zapotrzebowanie na programistów). Więc uczyłem się zarówno na studiach, na własnych projektach (chciałem zawojować świat jakąś aplikacją), jak i w pracy. Początek kariery miałem o tyle fajny, że miałem zespół, który mnie wdrażał, a że w tamtych czasach wszyscy pracowaliśmy z biura, to jak czegoś się nie umiało, to podchodził ktoś bardziej doświadczony i tłumaczył. To był duży boost, codziennie 8h w pracy + studia i projekty i w akademiku też osoby bardziej doświadczone gdzie przy piwku razem można było pogadać jak zdobyć świat jakąś aplikacją, lub lepiej zrozumieć dany temat, a że poczuło się wtedy pieniądz to motywacja też była. Po skończeniu studiów dostałem propozycję doktoratu, ale nie chciałem (całą magisterkę już pracowałem na pełen etat i nie chciało mi się tak dalej ciągnąć doktoratu), ale dostałem kolejną ofertę, że mogę prowadzić zajęcia na politechnice, i to był kolejny impuls. Bo używałem czegoś w projektach, bo tak robiliśmy w pracy, ale nie wiedziałem, czemu to tak działa, więc trzeba było zrobić krok wstecz i poznać teorię tak, żeby umieć to wyjaśnić. Podsumowując: Praca, własne projekty, kursy, filmiki, próba wyjaśnienia czegoś prostymi słowami jako test, czy to rozumiemy. W dzisiejszych czasach dochodzą LLM, które wydają się dobrym partnerem do nauki, więc też warto korzystać :) No i oczywiście najważniejsze warto subskrybować ten kanał!

  • @tomaszw6449
    @tomaszw6449 Před měsícem

    A ile to kosztuje?

    • @javaseniorpl
      @javaseniorpl Před 29 dny

      Zależy od tego, czy subskrypcję chcesz wykupić prywatnie, czy firma ją kupuje. W skrócie są trzy warianty. Płatność miesięczna: Individual - 10 USD Business - 19 USD Enterprise - 39 USD

  • @AsexoriaMapek
    @AsexoriaMapek Před měsícem

    Fajny materiał! dzięki

  • @mateusztwardy64
    @mateusztwardy64 Před měsícem

    Pomimo tego, że kilka osób już wspomniało o swoich odczuciach odnośnie trąbek, to tak mnie wk****, że muszę o tym napisać. Lądują u mnie obok reklamy shopee i baby shark jest chodzi o dźwięk. Najgorsze, że ciężko przewidzieć, kiedy podrozdział się kończy i trębacz zacznie. Pobrałem wideo do oglądania w samolocie i rozwalało mózg na słuchawkach. Znak rozpoznawczy nie jest czymś złym, ale nie powinien chyba grać roli głównej. Proszę, skróć i przycisz albo wywal. Przysłaniają naprawdę dobry kontent o wysokiej wartości. Super to omówiłeś.

    • @javaseniorpl
      @javaseniorpl Před měsícem

      Tak, wiem z tymi trąbkami mój błąd, w kolejnych filmikach jest to już poprawione, niestety w tym nie mogę już tego edytować :( Człowiek się uczy na błędach :D

    • @mateusztwardy64
      @mateusztwardy64 Před měsícem

      @@javaseniorplspokojnie. Te kilkusekundowe wstawki nie przysłaniają dobrego tłumaczenia na dobrych przykładach. Mój komentarz miał być na tyle sugestywny, by zwrócił Twoją uwagę. Mam też świadomość, że kanał jest relatywnie młody i starasz się go poprawiać. Ucieszę się, jeśli moja sugestia będzie przez Ciebie wzięta pod uwagę ;-)

  • @kolega071
    @kolega071 Před měsícem

    A sprawdzisz AI Assistant od IntelliJ?

    • @javaseniorpl
      @javaseniorpl Před měsícem

      Tak! Teraz zaczynam się bawić Tabnine, a następny w kolejce jest AI Assistant od JetBrains :D

  • @Kruk-
    @Kruk- Před měsícem

    Cześć, naszło mnie na naukę programowania. Uczę się już 1 dzień :D Może zrobiłbyś roadmapę z javy wynikającą z Twojego doświadczenia? A druga sprawa to może ustandaryzować te grafiki w miniaturach, grafiki z AI są fajne, ale w momencie odpalenia wszystkich filmów Tworzą mega chaos. Możemy się wymienić, ja zrobię Ci grafiki a Ty mi podpowiesz co i jak z kodzeniem :)

    • @javaseniorpl
      @javaseniorpl Před měsícem

      Cześć! Dzięki za komentarz! Co do roadmapy, po jednym dniu nauki, myślę, że nie warto od razu planować zbyt daleko. Na początku warto skupić się na składni języka i zrozumieniu obiektowości. Jest mnóstwo materiałów w internecie dla podstaw, więc nie musisz szukać "perełki", tylko pierwszy lepszy kurs, książka lub nawet pomoc AI, przerabiać to i dużo kodować i ta faza pewnie potrwa kilka miesięcy. Jak się ją przebrnie i składnia języka już nie sprawia problemu, to wtedy można myśleć o roadmap :) Jeśli chodzi o grafiki w miniaturach, pewnie masz rację, że mogą tworzyć chaos. Przyznaje nie znam się na tym, nie mam duszy artystycznej i z plastyki też za dobry nie byłem :D Ale tworzenie tych grafik sprawia mi frajdę, więc sam się jeszcze w to pobawię, jak stracę przyjemność z tego, to się odezwę :) Jasne, jeśli napotkasz jakieś problemy, możesz śmiało napisać, ale nie ukrywam, że skupiam się na pomocy w bardziej zaawansowanych tematach. W przypadku podstaw, narzędzia AI radzą sobie świetnie, więc myślę, że przez pierwsze kilka miesięcy mogą być doskonałym wsparciem w nauce. ;) Życzę powodzenia i dużo motywacji do nauki! 💪

  • @krajew1771
    @krajew1771 Před měsícem

    Cześć, kolejny super filmik. Planujesz w przyszłości poruszyć szerzej temat exception handlingu? Chodzi mi o takie głębsze wejście w temat a nie kolejny filmik w stylu - to jest try catch, działa tak, itd. Mi osobiście zależałoby na zrozumieniu kiedy warto te wyjątki rzucać, czyli w jaki sposób twoim zdaniem określać, że dany przypadek powinien rzucać wyjątek. Opis odpowiednich praktyk też byłby fajnym tematem do poruszenia I dzięki jeszcze raz za materiały bo przekazujesz dużo informacji w zwięzłej formie

    • @javaseniorpl
      @javaseniorpl Před měsícem

      Siemanko! W najbliższych filmikach mam zamiar mówić trochę więcej o architekturze, ale fakt, temat wyjątków może być ciekawy i trochę 'kontrowersyjny', bo są zwolennicy rzucania wyjątków/dzielenia ich per warstwa i są zwolennicy zwracania 'rezultatów' jako wynik metody zamiast wyjątków :D Więc dzięki za komentarz, kolejny fajny temat do nagrania, wrzucam na listę, ale niestety nie jestem w stanie obiecać, kiedy się pojawi. Dodatkowo nie jestem najlepszy w estymatach, więc wolę nawet nie próbować tego estymować :D

  • @theunderhook9913
    @theunderhook9913 Před měsícem

    Fajny film, mozna jeszcze dodac , metode OPTIONS i pre-flight check przegladarki.

    • @javaseniorpl
      @javaseniorpl Před měsícem

      Dzięki za komentarz! Masz rację, można by pokazać inne metody niż GET i wtedy pre-flight check (OPTIONS). Choć z drugiej strony, jeśli w jeden materiał włoży się zbyt wiele informacji, to może być ciężko zapamiętać :D Jak to mówią: na dwoje babka wróżyła :D

  • @Zentex2307
    @Zentex2307 Před měsícem

    Kolejny raz powtarzam...to najlepszy kanał na YT 🤟

    • @javaseniorpl
      @javaseniorpl Před měsícem

      Dzięki Wielkie! I motywacja do tworzenia +5 :D

  • @kamili282
    @kamili282 Před měsícem

    Jeszcze CQRS i Event Sourcing poprosimy :D

    • @javaseniorpl
      @javaseniorpl Před měsícem

      Będzie! Ale jeszcze chwilkę trzeba poczekać :D

  • @AsexoriaMapek
    @AsexoriaMapek Před měsícem

    Super materiał!. Nadrabiam ciągle wszystkie odcinki z kanału i nie żałuję żadnej minuty

  • @robertgardzinski6424
    @robertgardzinski6424 Před měsícem

    Daj podwyżkę rysownikowi! :)

  • @user-xu8we6if9f
    @user-xu8we6if9f Před měsícem

    Bardzo fajny kanał. Jedno z lepszych moich odkryć w tym roku. Pozdrawiam cieplutko autora.

  • @jakubk7158
    @jakubk7158 Před měsícem

    Dziękuję za Twoje filmy są kozak ;)

  • @Macieek11
    @Macieek11 Před měsícem

    Super materiał👍 Dzięki!

  • @blazejmojak
    @blazejmojak Před měsícem

    świetnie zrobione i skondensowana, klarowna wiedza. Jak byś zabezpieczył backend, aby nie wysłał w ogóle danych? Czy zrobić w kodzie sprawdzenie pochodzenia zapytania i dać response z np. jsonem: nieuprawniony. Chodzi o przypadek, gdzie np. nie chcesz wysłać klientowi np. listy użytkowników, żeby nie mógł w narzędziach zrobić podglądu odpowiedzi. Czy są na to inne sposoby?

    • @javaseniorpl
      @javaseniorpl Před měsícem

      Dzięki za miłe słowo! Gdy klient otrzymuje odpowiedź z danymi, oznacza to, że miał uprawnienia do ich pobrania. Więc nawet jak pobrał te dane na nieświadomce to polityka Same-Origin Policy zapewnia, że dane te nie zostaną wykorzystane przez jakiś złośliwy skrypt, więc tutaj rozimie, że czysto teoretycznie rozważamy jak zaimplmetnować taki mechanizm na backend, żeby nawet nie wysłał tych danych. W Springu najprościej byłoby zaimplementować to za pomocą filtrów, czyli dodać interceptor (na przykład klaskę implementującą HandlerInterceptor), który przechwytuje request przed dotarciem do kontrolera. Jeśli nagłówek 'Origin' wskazuje na niezaufaną aplikację, od razu zwracamy w response jakiś Forbidden :D

  • @ww4102
    @ww4102 Před měsícem

    Czemu dalle3 low effort thumbnail

    • @javaseniorpl
      @javaseniorpl Před měsícem

      Mam subskrypcje, to korzystam, ale możliwe, że są lepsze rozwiązania :D

    • @ww4102
      @ww4102 Před měsícem

      @@javaseniorpl spoko, tak naprawdę nie okładka a treść się liczy :] Dobra robota, zasięgów i sukcesów

    • @javaseniorpl
      @javaseniorpl Před měsícem

      @@ww4102 Dzięki!

  • @fuukowatty9817
    @fuukowatty9817 Před měsícem

    Jak mechanizm lockingu ma się do transkacji? Zazwyczaj przy aktualizowaniu kwoty na koncie wykonuję się znacznie więcej operacji DDL, wtedy blokujemy wiele rekordów takim pesymistic lockingiem?

    • @javaseniorpl
      @javaseniorpl Před měsícem

      Za pomocą pesymistycznego blokowania możemy blokować wiele rekordów, ale wiadomo, że wiąże się to z pewnym narzutem, więc opłaca się to stosować, gdy ryzyko wystąpienia konfliktów jest duże. W przypadku aktualizowania kwoty ryzyko wystąpienia konfliktów zazwyczaj nie będzie duże (oczywiście zależy to od kontekstu), ale zwykle w takich przypadkach lepiej będzie skorzystać z optymistycznego blokowania. Więc, odpowiadając trochę w stylu "to zależy", jeśli jest taka potrzeba, będziemy blokować wiele rekordów za pomocą pesymistycznego blokowania :D

    • @fuukowatty9817
      @fuukowatty9817 Před měsícem

      @@javaseniorpl jak wszystko w programowania :D No tak jeśli to jest konto jakieś fundacji to być może lepiej pesymistic locking a jak zwykłe konto to optymistic

  • @barskitv8884
    @barskitv8884 Před měsícem

    Fajny film. Cieszę się, że takie filmy pojawiają się na "polskim youtubie"

  • @michaljava9665
    @michaljava9665 Před měsícem

    super materiały! Dzięki

  • @DonaldFranciszekTusk
    @DonaldFranciszekTusk Před měsícem

    Powiedziałeś, że załadowanie danych do przeglądarki mogłoby być niebezpieczne, ale jednocześnie stwierdziłeś, że to zewnętrzny backend decyduje o tym, czy je przekazać. Jak to się klei?

    • @javaseniorpl
      @javaseniorpl Před měsícem

      Przykład: Załóżmy, że umieściłem złośliwy skrypt na moim blogu, który ma za zadanie wysłać mi jakieś dane z czyjegoś banku X. Gdyby ktoś, będąc zalogowanym do banku X, odwiedził mój blog, skrypt mógłby automatycznie wysłać zapytanie do banku w tle, bez wiedzy użytkownika, a następnie wysłać pobrane dane z tego banku do mnie. Jednak dzięki mechanizmowi Same-Origin Policy (SOP), to się nie stanie. Skrypt na moim blogu nie będzie mógł załadować danych pobranych z banku X. W rezultacie, chociaż zapytanie zostałoby wysłane, złośliwy skrypt nie mógłby odczytać odpowiedzi z banku ani przesłać tych danych do mnie. Ale to serwer banku zadecydował, że nie wolno mojemu skryptowi wczytać tych danych. Jeżeli jednak mówimy o aplikacji składającej się z backendu i frontu, wtedy skrypty robione przez frontend muszą współdziałać z danymi dostarczanymi przez backend. W tym przypadku używamy konfiguracji CORS na serwerze backendowym, aby określić, które fronty mogą bez przeszkód korzystać z danych wysyłanych w naszych odpowiedziach.

  • @s3nsimilla193
    @s3nsimilla193 Před měsícem

    extra, bardzo fajne podejście i super wytłumaczone, chcemy więcej! :-)

  • @bartomiej6824
    @bartomiej6824 Před měsícem

    Masz mega kanal, mega dobra robota sposob tlumaczenia i publikowane tresci, zloto. Dziekuje Ci za to i lec dalej bo jest wysmienicie, pozdrawiam bardzo serdecznie.

  • @user-br5oc5ef7m
    @user-br5oc5ef7m Před 2 měsíci

    Bardzo fajny temat, łapeczka leci. Sam od siebie mogę zaproponować jako pomysł na odcinek, coś o tym jak działa spring security. W bardzo podobnym stulu jak to że jest przedewszystkim idea i troche kodu

    • @javaseniorpl
      @javaseniorpl Před 2 měsíci

      Dzięki wielkie za miłe słowo i sugestie! Fakt idę działania filtrów w Spring Security pewnie też da rade pokazać bez potrzeby skupiania się na kodziku :D

  • @michalechowicz6903
    @michalechowicz6903 Před 2 měsíci

    Świetne wytłumaczenie!

  • @kuba4556
    @kuba4556 Před 2 měsíci

    Fajnie wytłumaczone, łapka poleciała.

  • @Meffiuxx3
    @Meffiuxx3 Před 2 měsíci

    Zaaajebiste, dzieki !

  • @Zentex2307
    @Zentex2307 Před 2 měsíci

    Standardowo profeska. Plus poczucie humoru absolutnie w moim stylu. 😂 Propsy

  • @tomaszw6449
    @tomaszw6449 Před 2 měsíci

    Nagrywałeś to w sobotę po 21? :)

    • @javaseniorpl
      @javaseniorpl Před 2 měsíci

      Bystre oko! Zgadza się 2 tygodnie temu w sobotę :D

  • @Adi-ft4eh
    @Adi-ft4eh Před 2 měsíci

    Świetny materiał, zacząłem stosować w pracy i pomogło mi to w dużym stopniu uwolnić się od mocków ;) Podczas korzystania narodziły mi się dodatkowe pytania, czy jeśli pisze test który bazuje na przetwarzaniu jakiś danych to czy w sekcji given powinienem uzupełnić danymi moją inMemoryBazę uzywająć metody .create z repo? Czy jest na to jakiś lepszy pattern, np uzupełnienie mapy w trakcie deklaracji w implementacji interfejsu -> Chętnie dowiem się jak ty radzisz sobie z tym case'm. Druga sprawa, w SqlCustomRepository w metodzie findById rzucasz wyjątek w przypadku braku encji, czy SqlCustomerRepository powinno się dodatkowo przetestować na uruchomienie odpowiednich metod i rzucenie wyjątków? Np uzywajac Mockito.verify() ?

    • @javaseniorpl
      @javaseniorpl Před 2 měsíci

      Dzięki wielkie! Co do pytań: 1. Ja robię to tak, że to, co jest potrzebne do działania aplikacji, ale jest bardziej globalne i niezwiązane bezpośrednio z testem, zwykle uzupełniam w metodzie przed odpaleniem testu (@BeforeEach). Natomiast w sekcji 'given' w teście dodaję to, co jest kluczowe dla wykonania danego testu. Lubię widzieć od razu przy czytaniu testu, jakie kluczowe dane zostały dodane. Można oczywiście potworzyć metody/klasy pomocnicze. 2. Jeśli chodzi o rzucanie wyjątków w repozytorium, to nie zawsze jest to uznawane za dobrą praktykę. Tutaj bardziej chodziło mi o to, że tworząc taki interfejs, możemy w implementacji repozytorium zrobić coś więcej, ale lepiej, żeby to było mapowanie na inny obiekt :) Co do tego wyjątku to jest związane z logikami w naszej aplikacji, planuję nagrać o tym filmik. W skrócie, mamy kilka logik. W tym przypadku serwis bierze odpowiedzialność za logikę procesową, czyli jak leci proces, pobierz customera, wykonaj coś na jakimś obiekcie, jeśli wykonało się A, to wykonaj B i tak dalej. Obiekt domenowy natomiast bierze odpowiedzialność za logikę domenową, czyli za walidację spójności - czyli mogę przejść ze stanu A na stan B jeśli.... Testując swój serwis, chciałbym przetestować logikę procesową. Może być sytuacja, że jeśli nie znaleziono klienta, to zrób coś innego, może dodaj jakiegoś 'ghosta', więc wtedy w repozytorium nie chcę mieć rzucania wyjątkami, bo nie pozwoli to dobrze przetestować logiki procesowej. Ten przykład był do pokazania możliwości, że się da i czasami ma to sens, wiadomo kontekst jest królikiem :) Jak pojawi się filmik o logikach w aplikacji, będzie to lepiej wyjaśnione!

  • @stormShadow64
    @stormShadow64 Před 2 měsíci

    Super materiał, świetnie wytłumaczone, wspaniała robota - już udpostępniam cioci

    • @javaseniorpl
      @javaseniorpl Před 2 měsíci

      Dzięki wielkie! Mam nadzieję, że cioci też się spodoba!

  • @user-br5oc5ef7m
    @user-br5oc5ef7m Před 2 měsíci

    Fajny filmik, będzie jakiś o zmianach w nowej Javie ?

    • @javaseniorpl
      @javaseniorpl Před 2 měsíci

      Dzięki! Jeśli chodzi o zmiany w Java 21 (ostatni LTS), to jest filmik: czcams.com/video/42AJLnrlw5g/video.html Jeśli chodzi o Java 22 (marzec 2024), to nie wiem, czy się wyrobię przed Java 23 (wrzesień 2024), bo mam na swojej liście TODO kilka filmików, ale może się uda! Więc obiecać nie mogę, ale nie mówię nie :D

  • @MusztardowyDran
    @MusztardowyDran Před 2 měsíci

    Cudo, skarbnica wiedzy, z chęcią łyknę więcej takich materiałów

  • @teczowyrozowy
    @teczowyrozowy Před 2 měsíci

    9:34 jak to dokładnie działa? Idzie update z WHERE ... AND version =4. Baza zwroci updated 0 rows, czy wtedy np hibernate widzi ten 0 update i sam rzuca locking exception, a potem zamyka tranzakcje? Nadal 2 tranzakcje moga tak zrobic, obie dostac updated 1 row, a potem zacommitowac i w sumie nic sie nie zmieni. Jak to dziala?

    • @javaseniorpl
      @javaseniorpl Před 2 měsíci

      Dzięki za komentarz! W bazach danych, kiedy robi się update, od momentu wykonania update do commitu, baza danych automatycznie zakłada blokadę na ten rekord (nie trzeba nic dodawać w zapytaniu). Dlatego "update z WHERE... AND version = 4" założy blokadę na ten rekord i żaden inny update nie będzie mógł się wykonać w tym czasie. Więc gdy update z innego wątku będzie się wykonywać, pierwsza transakcja będzie już po commit, więc wersja rekordu na bazce będzie 5. Czyli inna transakcja nie znajdzie rekordu z wersją 4, co spowoduje, że w aplikacji pojawi się wyjątek, informujący o działaniu mechanizmu optimistic locking. Czyli normalnie, bez żadnych blokowań, ostatni wygrywa, a w przypadku optimistic locking pierwszy wygrywa 🥇

  • @konradkrok2505
    @konradkrok2505 Před 2 měsíci

    super filmik!!!

  • @Kristofi12
    @Kristofi12 Před 2 měsíci

    dzięki, czekam na więcej!

    • @javaseniorpl
      @javaseniorpl Před 2 měsíci

      Dzięki! Tworzą się kolejne materiały! 💪

  • @tomaszw6449
    @tomaszw6449 Před 2 měsíci

    Blokowanie konta: pesymistyczne - LOCK założony przez komornika, optymistyczne - LOCK założony przez skarbówkę (z założenia musiałeś mieć jakiś dochód), DEADLOCK - dwa powyższe jednocześnie

  • @_I_like_kebeb
    @_I_like_kebeb Před 2 měsíci

    Jaki zbieg okoliczności ,wczoraj mój mentor kazał mi się tego nauczyć a dzisiaj ty wrzucasz filmik .Dopiero wczoraj ogarnąłem jak wielką rolę odgrywają poziomy izolacji i zarządzanie transakcjami i dziwię się , że żaden kurs który przerobiłem nawet o tym nie wspomniał 😅

    • @javaseniorpl
      @javaseniorpl Před 2 měsíci

      O! To nie może być przypadek! Los chciał, aby kolejne odcinki JavaSenior wpisywały się w twoją ścieżkę rozwoju. Dlatego od teraz musisz być na bieżąco z każdym nowym filmem :D PS. Dzięki za komentarz!

  • @MegaSzymcioo
    @MegaSzymcioo Před 2 měsíci

    cenna wiedza

  • @s3nsimilla193
    @s3nsimilla193 Před 2 měsíci

    fajne, elegancko wytłumaczone, kojarzę temat ale nie wiedziałem, że to się tak nazywa :D

    • @javaseniorpl
      @javaseniorpl Před 2 měsíci

      Najważniejsze, żeby wiedzieć, że takie coś jest i umieć tego użyć. W IT mamy sporo nazw na te same koncpety i przez to potem często się kłócimy co jest czym, czy to już taki pattern czy inny itp :D

  • @user-br5oc5ef7m
    @user-br5oc5ef7m Před 2 měsíci

    Myślałem że coś umiem a każdym filmem czuje się jak debil

  • @_I_like_kebeb
    @_I_like_kebeb Před 2 měsíci

    faktycznie to jest lepsze podejście niż zabawa w mocki :D

  • @_I_like_kebeb
    @_I_like_kebeb Před 2 měsíci

    chętnie zobaczyłbym testowanie z użyciem mocków na jakiejś większej aplikacji w twoim wydaniu

    • @javaseniorpl
      @javaseniorpl Před 2 měsíci

      Dzięki za komentarz! Ogólnie staram się unikać mocków na ile to możliwe, wiadomo czasami trzeba, ale jeśli można jakoś inaczej to obejść, np. używając podejścia portów i adapterów, a faktycznie logika nie jest crudowa, to staram się tworzyć jakieś implementacje na potrzeby testów. Tutaj filmik, w którym pokażę przykład: czcams.com/video/ZrIeY7NwKSI/video.html Jasne, czasami użycie mocków jest najprostsze i najlepsze. Może uda mi się nagrać też coś o tym, ale najbliższe filmiki chciałem poświęcić bardziej architekturze aplikacji :D

  • @Zentex2307
    @Zentex2307 Před 2 měsíci

    Sub, Like i co tam jeszcze YT wymyśli. Kanał TOP :)

  • @Zentex2307
    @Zentex2307 Před 2 měsíci

    Do mnie trafia ta forma, dobre i zwięzłe wyjaśnienia, fajne porównania. Wg. mnie właśnie takiego kontentu jest za mało na polskim YT, czyli coś więcej niż wyjaśnianie podstaw, głębsze pochylenie się nad tematem. Mam nadzieję, że kanał będzie się dobrze rozwijał i czekam na kolejne filmy! Powodzenia!

  • @MrEloska
    @MrEloska Před 2 měsíci

    Pytanie mam -- ja akurat nie jestem ze świata Java/JVM. W przypadku oznaczenia klasy jako `Embeddable` i podanie jej jako `pola` encji -- w jaki sposób zostanie to zapisane w bazie? Pod spodem będzie to rozbite na 2 kolumny? Czy zapisze się jakiś "zrerializowany" obiekt? Czy jeszcze inaczej?

    • @javaseniorpl
      @javaseniorpl Před 2 měsíci

      Rozbite na dwie :) Domyślnie, każde pole w klasie oznaczonej jako @Embeddable jest mapowane na osobną kolumnę w tabeli bazy danych przypisanej do encji. Przykładowo jeśli mamy encję Reward z polem RewardDateRange oznaczone jako @Embeddable, a w klasie RewardDateRange znajdują się dwa pola: startDate i endDate, to w tabeli "rewards" w bazie danych będziemy mieli dwie kolumny: "start_date" i "end_date".

  • @marcinb7578
    @marcinb7578 Před 2 měsíci

    Kiedy dowiedziałem się o Outbox Pattern to był to jeden z tych momentów w moim życiu zawodowym kiedy miałem wielkie "WOW, ale to jest genialne". W aplikacji w której pracowałem szły nam wiadomości na kolejkę, a w bazie danych wpisu brak, bo kilka linii po wysłaniu wiadomości leciał jakiś exception i rollback na transakcji bazodanowej.

  • @marcinb7578
    @marcinb7578 Před 3 měsíci

    Dzisiaj przypadkowo trafiłem na Twój kanał i to pierwsze wideo które obejrzałem. Moją uwagę zwróciło to, że pomimo tego że mówisz szybko to mówisz wyraźnie. Podoba mi się to, ponieważ jako doświadczony i szybko myślący developer takie wideo jest dla mnie wartością dodaną, gdyż mnie wolne czy nawet normalne tempo mówienia męczy oraz mam poczucie straty czasu. W Twoim przypadku iloraz przekazanej wiedzy i omówionego kodu do czasu poświęconego na obejrzenie wideo jest wysoki 😃 Pozdrawiam

    • @javaseniorpl
      @javaseniorpl Před 3 měsíci

      Dzięki wielkie za feedback i miłe słowo!

  • @user-qj9qk4hn8k
    @user-qj9qk4hn8k Před 3 měsíci

    Śmieszny ten żart na początku :D no i cały filmik super!