Wzorzec Iterator definiuje sposób sekwencyjnego dostępu do elementów kolekcji bez ujawniania jej wewnętrznej struktury. PHP implementuje go przez interfejsy Iterator i IteratorAggregate. Generatory (dostępne od PHP 5.5) to składniowy cukier który znacznie upraszcza pisanie iteratorów – szczególnie przy leniwym generowaniu dużych zbiorów danych.
Wzorzec Proxy kontroluje dostęp do innego obiektu. Klient myśli że rozmawiał z prawdziwym obiektem, a w rzeczywistości rozmawiał z pośrednikiem który może dodać cache, logowanie, lazy loading, kontrolę dostępu albo zdalny dostęp. W Magento 2 Proxy to wbudowany mechanizm – każda klasa z sufiksem \Proxy w kontenerze DI to właśnie ten wzorzec.
Wzorzec Decorator pozwala dynamicznie dodawać zachowanie do obiektu bez modyfikacji jego klasy i bez dziedziczenia. Każdy dekorator opakowuje oryginalny obiekt i rozszerza lub modyfikuje jego działanie. W PHP i Magento 2 to jeden z najczęściej stosowanych wzorców – system pluginów Magento to de facto Decorator zaimplementowany przez framework DI.
Wzorzec Command enkapsuluje żądanie jako obiekt, co pozwala parametryzować operacje, kolejkować je, logować i implementować cofanie. W Magento 2 ten wzorzec jest podstawą systemu kolejkowania wiadomości (MessageQueue) – każda wiadomość to Command który jest wykonywany asynchronicznie przez consumer. Pokażę implementację od klasycznej wersji po integrację z kolejką Magento.
Chain of Responsibility to wzorzec behawioralny w którym żądanie przechodzi przez łańcuch handlerów – każdy może je obsłużyć, zmodyfikować lub przekazać dalej. Idealny do walidacji wieloetapowej, pipeline przetwarzania danych i middleware. W Magento 2 ten wzorzec jest wszędzie – w pluginach, pipeline zamówień i obsłudze żądań HTTP. Pokażę implementację od podstaw i trzy różne warianty łańcucha.
Flyweight to wzorzec strukturalny który minimalizuje zużycie pamięci przez współdzielenie jak największej ilości danych między podobnymi obiektami. Zamiast tworzyć tysiące obiektów z powtarzającymi się danymi – tworzysz jeden obiekt i referencje do niego. W Magento 2 ten wzorzec pojawia się w wielu miejscach: tłumaczenia, konfiguracja sklepu, obiekty EAV. Pokażę implementację od podstaw i jak go rozpoznać w istniejącym kodzie.
Interpreter to wzorzec GoF który pozwala zdefiniować gramatykę dla prostego języka i zbudować interpreter który przetwarza wyrażenia w tym języku. Brzmi akademicko, ale ma bardzo konkretne zastosowania: reguły rabatowe konfigurowane przez operatorów bez zmian kodu, wyrażenia filtrujące produkty, warunki widoczności komponentów w CMS. Buduję od zera mini-interpreter reguł promocyjnych w PHP.
Gdy masz 100 000 zamówień do eksportu albo milion wierszy do importu, wczytanie wszystkiego do tablicy to pewna śmierć przez wyczerpanie pamięci. PHP oferuje dwa eleganckie mechanizmy leniwego przetwarzania: interfejs Iterator dla klas które sami piszemy i Generator (yield) dla prostszego kodu który nie wymaga całej klasy. Pokazuję oba z praktycznymi przykładami z Magento 2.
Specification to wzorzec który pozwala enkapsulować reguły biznesowe w osobnych, komposytowalnych obiektach. Zamiast rosnącego if-elsa w serwisie albo powtarzającego się kodu filtrowania w kilku miejscach, każda reguła to osobna klasa którą można łączyć przez AND, OR i NOT. Świetnie sprawdza się przy filtrach produktów, regułach rabatowych i walidacji zamówień.
Event Sourcing to wzorzec architektoniczny który zmienia sposób myślenia o persystencji: zamiast zapisywać aktualny stan obiektu, zapisujesz sekwencję zdarzeń które do tego stanu doprowadziły. Stan jest wynikiem odtwarzania tych zdarzeń. Brzmi skomplikowanie, ale rozwiązuje realne problemy z audytem, debugowaniem i odtwarzaniem historii biznesowej.
