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.
Memento to wzorzec behawioralny który pozwala zapisywać i przywracać poprzedni stan obiektu bez ujawniania szczegółów jego implementacji. Undo/redo w edytorze tekstowym, historia zmian cen produktu, rollback konfiguracji – wszędzie tam gdzie chcesz cofnąć operację, Memento daje eleganckie rozwiązanie. Implementuję od zera z przykładami z e-commerce.
CQRS (Command Query Responsibility Segregation) to wzorzec architektoniczny który rozdziela operacje odczytu od operacji zapisu. Brzmi jak akademicki abstrakt, ale rozwiązuje realny problem: model danych zoptymalizowany pod zapis (relacyjny, znormalizowany, z walidacją) jest zwykle beznadziejny do odczytu (wiele joinów, skomplikowane mapowanie). CQRS pozwala mieć dwa osobne modele – jeden do zapisu, drugi do odczytu.
