Decorator i Proxy to dwa wzorce strukturalne które działają podobnie – oba opakowują obiekt i implementują ten sam interfejs. Różni je intencja: Decorator dodaje nową funkcjonalność, Proxy kontroluje dostęp do obiektu. Subtelna różnica, ale fundamentalna dla prawidłowego zastosowania.
Singleton i Builder to dwa bardzo różne wzorce kreacyjne. Singleton jest jednym z najkrótszych wzorców GoF i jednym z najczęściej nadużywanych. Builder rozwiązuje zupełnie inny problem – budowanie złożonych obiektów krok po kroku, gdy konstruktor z dziesiątkami parametrów staje się nieczytelny. Pokazuję oba z przykładami i bez owijania w bawełnę mówię kiedy Singleton to zły pomysł.
Factory Method i Abstract Factory to dwa najczęściej mylone wzorce kreacyjne. Oba dotyczą tworzenia obiektów, ale rozwiązują różne problemy. Factory Method pyta „który podtyp obiektu stworzyć”. Abstract Factory pyta „jaką rodzinę powiązanych obiektów stworzyć”. Pokazuję oba od zera w PHP z przykładami które ilustrują różnicę.
Wzorce projektowe to sprawdzone rozwiązania często powtarzających się problemów w projektowaniu oprogramowania. Nie są to gotowe biblioteki ani fragmenty kodu do skopiowania – to szablony myślenia, które pomagają projektować elastyczny, testowalny i czytelny kod. W tej serii omówię najważniejsze wzorce z katalogu Gang of Four z przykładami w czystym PHP.
SOLID to zestaw pięciu zasad projektowania obiektowego sformułowanych przez Roberta C. Martina. Każdy je zna z nazwy, niewielu stosuje świadomie. Pokazuję każdą zasadę na konkretnym przykładzie PHP – najpierw kod który ją łamie, potem refaktoring, a przy kilku zasadach odniesienie do Magento 2, które SOLID stosuje konsekwentnie w swojej architekturze.
PHP 8.1 wyszło w grudniu 2021. Mam za sobą kilka miesięcy używania enumeracji, readonly properties i intersection types w projektach produkcyjnych. Czas na uczciwe podsumowanie: co weszło do kodu naturalnie, co zaskakuje i gdzie są granice tych nowości w kontekście Magento 2 i starszych baz kodu.
Chain of Responsibility pozwala przekazywać żądanie przez łańcuch handlerów, gdzie każdy może je obsłużyć lub przekazać dalej. Eliminuje rozbudowane if-else i switch decydujące „kto powinien to obsłużyć”. W Magento 2 ten wzorzec pojawia się w pipeline przetwarzania płatności, middleware HTTP i systemie reguł cenowych. Pokazuję implementację od zera i praktyczne zastosowania.
Redis jest de facto standardem w produkcyjnych wdrożeniach Magento 2. Zastępuje cache plikowy, obsługuje sesje i może działać jako backend Full Page Cache. Każdy z tych przypadków wymaga osobnej instancji lub bazy Redis z inną konfiguracją. Pokazuję jak to prawidłowo skonfigurować, dlaczego oddzielne instancje mają znaczenie i jak monitorować Redis w środowisku Magento.
Programowanie dynamiczne (DP) to technika rozwiązywania problemów przez rozbicie ich na podproblemy i zapamiętywanie wyników aby nie liczyć ich wielokrotnie. Brzmi abstrakcyjnie, ale w praktyce stosujesz DP kiedy piszesz cache dla kosztownej operacji albo szukasz optymalnego zestawu produktów do oferty. Pokazuję dwa klasyczne problemy z implementacją w PHP.
PHP 8.1 wychodzi w grudniu 2021 i przynosi kilka zmian które od razu wchodzą do codziennego kodu. Enumy to chyba największa nowość od lat – nareszcie natywne typy wyliczeniowe bez obejść przez stałe i klasy. Do tego readonly properties, intersection types i never return type. Przeglądam co jest gotowe do użycia od razu, a co wymaga ostrożności przy integracji z Magento 2.
