Nadal zbieram się, aby podzielić się z Wami wrażeniami po PHP Srbija 2018, ale ciężko mi to zrobić bez zdjęć. A zdjęcia ciągle są nieprzejrzane i koło się zamyka. Ale…
W poniedziałek byłem na powakacyjnym PHPers Trójmiasto w C200 Office. Jeśli dobrze sięgam pamięcią ostatni raz byłem w 2014 roku (!), kiedy spotkania odbywały się jeszcze w PPNT. W tamtym czasie lokalne PHPersy dopiero startowały (obok Warszawy pojawiło się Trójmiasto oraz Śląsk). Nie wiem skąd wynikła przerwa, może brak systematyczności spotkań i lokalizacja źle skomunikowana.
Czemu wybrałem się tym razem? Dobre pytanie. Może brakuje mi PHPCon Poland i szukam czegoś w zastępstwie w Polsce. Do Pragi na PHP CE się nie wybieram – dla mnie będzie to zupełnie inna konferencja, poza tym grafik spotkań zagranicznych i tak jest już napięty.
W tym roku nie było również Zimowiska Linuksowego. I tak trochę PHPers Trójmiasto potraktowałem jako mały event z ograniczoną ilością uczestników. Powiem Wam: było warto!
testy jednostkowe
Poniedziałkowe spotkanie związane było z testami jednostkowymi (w oparciu o phpSpec i phpUnit) oraz podsumowaniem zmian jakie zaszły w Symfony 4, oraz czym tak naprawdę jest Flex.
Ci z Was, którzy byli tam wraz ze mną, wiedzą najlepiej, że ciężko napisać coś o prelekcji i kodowaniu na żywo Leszka Prabuckiego. Nie chodzi o to, że było źle. Leszek bardzo fajnie i szybko pokazał nam jak może wyglądać zwyczajny dzień pracy programisty, gdy dostajemy od Klienta np. zlecenie wykonania rejestracji do systemu. Od spotkania z Klientem, event stormingu itp., poprzez napisanie pierwszych testów (phpSpec), refactoringu, stworzeniu domeny (zalążek DDD) i skupieniu się na tym co chce Użytkownik zrobić, a nie jak. To było po prostu specyficzne doświadczenie.
PHPUnit Good Practices
Natomiast Dariusz Rumiński, który pracuje w Delivery Hero (PizzaPortal), rozwinął myśl Leszka z naciskiem na same testy jednostkowe oraz jak to zrobić dobrze w oparciu o phpUnit. Darek pracuje z phpUnit od wersji 3.3 (2008). Przez lata phpUnit się zmieniał, przechodził metamorfozy, jedne funkcje się pojawiały, a inne niestety znikały.
Obecnie phpUnit posiada pewną warstwę abstrakcji, tzn. kompatybilności, ale nie daje ona nam wszystkiego i musimy o tym pamiętać aktualizując phpUnit już w istniejącym projekcie z istniejącymi testami. Oferuje również ponad 100 gotowych porównań (assertions).
Nieraz zdarza się, że nasze testy nie mogą obejść się bez atrap (mocks). Obecnie phpUnit pozwala w różny sposób tworzyć atrapy. Od starodawnego MockObject, poprzez Mockery, kończąc na współczesnym i zalecanym Prophecy, który już nie jest powiązany ze strukturą.
I najważniejsze o czym trzeba pamiętać – pisać testowalny kod.
Symfony 4 i Flex
Tematem zamykającym spotkanie był Symfony 4 i Flex. Jakub Zalas niesamowicie poprowadził swoją prelekcję (pomijając fakt wspomnienia jego największego osiągnięcia). Jakub pokazał czym tak naprawdę jest Symfony 4, czyli Symfony 3.4, które de facto jest odchudzoną i zmienioną wersją Symfony 3.3, a te wersji 3.2 itd. Ale taki był zamysł twórców Symfony 2, że kolejne wydania będą często, ale nie będą przynosiły rewolucji (jak Sf2).
W dużym skrócie, jakie zmiany przynosi Sf4? Ulepszona struktura projektu. Nie ma już folderu na aplikacje (/app), a aby dostosować się do całego środowiska PHP zmieniono chociażby /web na /public.
Dodatkowo pojawia się .env ze zmiennymi konfiguracyjnymi, które powinno być używane dla środowisk developerskich.
Natomiast w konfiguracji nie ma już głównego pliku konfiguracyjnego. Każdy pakiet może mieć swojego yml. Pojawia się również bundles.php do konfiguracji jakich bundle’i chcemy używać w projekcie (wszystkie te informacji dzieją się obecnie automatycznie dzięki autowire i Flex).
Flex przynosi również aliasy dla composera (np req templates zainstaluje twig). Core Team wybrał aliasy dla najbardziej zalecanych paczek.
A najważniejsza zmiana, jak dla mnie? Symfony 4 na dysku zajmuje 14MB (Sf3.4 ~ 58MB), tym samym spadła ilość plików do 2.5k (Sf3.4 8.9k). Co przyspiesza działanie aplikacji, ale bez wspomnianego opcache i tak się nie obędzie.
Czekam na następne spotkanie, które na pewno pojawi się w moim kalendarzu.