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.
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.
Proxy to wzorzec który stawia pośrednika między klientem a prawdziwym obiektem. Pośrednik implementuje ten sam interfejs co oryginał, więc klient nie widzi różnicy – a Proxy może robić coś dodatkowego: opóźniać inicjalizację, kontrolować dostęp, logować wywołania lub keszować wyniki. W Magento 2 Proxy jest generowane automatycznie dla klas z ciężkimi konstruktorami.
Wzorzec Command zamienia żądanie wykonania operacji w samodzielny obiekt. To pozwala kolejkować operacje, logować je, cofać (undo), a nawet budować makra z sekwencji komend. W ekosystemie PHP pattern Command znajdziesz w Symfony Console, w Magento jako podstawę systemu kolejkowania i w każdym systemie który obsługuje historię operacji.
Repository to wzorzec, który oddziela logikę biznesową od szczegółów dostępu do danych. Zamiast rozsiewać zapytania SQL lub wywołania ORM po całej aplikacji, masz jedną klasę odpowiedzialną za pobieranie i zapisywanie encji. W Magento 2 Repository jest częścią Service Contracts – to standard, nie opcja. Pokazuję jak zbudować własne Repository od zera i dlaczego warto.
Operator new w kodzie produkcyjnym to sygnał ostrzegawczy. Klasa tworząca instancje innych klas bezpośrednio jest z nimi silnie sprzężona – trudno ją testować, trudno rozszerzać. Factory Method to wzorzec, który deleguje odpowiedzialność za tworzenie obiektów do dedykowanych klas. W Magento 2 fabryki są wszechobecne – i generowane automatycznie.
Dziedziczenie to najprostszy sposób na rozszerzenie klasy – ale nie zawsze najlepszy. Gdy chcesz dodać kilka niezależnych funkcji do obiektu, hierarchia klas szybko staje się nieczytelna. Decorator pozwala „owijać” obiekty w kolejne warstwy funkcjonalności bez modyfikacji oryginału i bez głębokiego dziedziczenia.
Observer to jeden z najczęściej stosowanych wzorców w programowaniu obiektowym, a w ekosystemie Magento 2 jest wbudowany w sam rdzeń platformy. Jeśli kiedykolwiek pisałeś obserwatora zdarzenia w Magento, używałeś tego wzorca – często nie zdając sobie z tego sprawy.
Strategy to jeden z tych wzorców, które po pierwszym kontakcie wydają się zbędną komplikacją. Po co opakowywać jeden algorytm w osobną klasę? Sens widać dopiero przy drugim, trzecim algorytmie – gdy zamiast rosnącego if-elsa masz czysty, wymienialny kod. Pokazuję jak to działa w PHP i gdzie Magento 2 stosuje ten wzorzec bez Twojej wiedzy.
