Znajomość wzorców przyspiesza samodzielne rozwiązywanie wielu problemów programistycznych i systematyzuje terminologię używaną przez programistów. Ta wiedza zdecydowanie oszczędza czas potrzebny na stworzenie dobrze działającej i poprawnie skonstruowanej aplikacji.
Autor: Paweł Kozłowski, Piotr Szarwas ?ródło: PHP Solutions - www.phpsolmag.org
Powinieneś być zaznajomiony z programowaniem obiektowym w PHP5
Poznasz najważniejsze wzorce projektowe i ich praktyczne wykorzystanie w budowie frameworka
Ideę wzorców projektowych najlepiej oddaje zdanie: Powerful and practical solutions to common problems, czyli wydajne i praktyczne rozwiązania znanych problemów programistycznych.
Najprostszym przykładem wzorca może być włączanie tych samych plików (np. header.php i footer.php) na wielu stronach WWW. Dzięki temu, zmiany dokonane w tych plikach będą widoczne na wszystkich stronach, które z nich korzystają. W rzeczywistości wzorce rozwiązują dużo poważniejsze problemy, stanowiąc często prawdziwe remedium dla programistów, a w konsekwencji zapewniając solidną, elastyczną i wydajną architekturę aplikacji. Bardzo istotne jest odróżnienie wzorców programistycznych (np. Dekorator pozwalający na udekorowanie klasy nowymi funkcjonalnościami) od wzorców architektonicznych, zwanych też projektowymi (np. MVC mówiący o tym, że aplikację należy dzielić na trzy lub cztery warstwy: prezentację, logikę/serwisy i dane). Pierwsze dają się przełożyć bezpośrednio na kod, kiedy te drugie wyznaczają strukturę naszego kodu w skali warstw, a nie pojedynczych klas.
Wzorce projektowe zawsze były domeną obiektowych języków programowania takich jak Java. Ich implementacja dla PHP3 była niemożliwa (brak modelu obiektowego), a PHP4 stawiało wiele ograniczeń, np. brak interfejsów i typowania. Na szerszą skalę zaczęto je stosować dopiero w PHP5, które zapewnia bogate i w pełni obiektowe środowisko aplikacyjne.
Tym artykułem otwieramy serię poświęconą wzorcom projektowym, w której dokonamy usystematyzowania wiedzy, odróżnienia wzorców architektonicznych od programistycznych, ich podziału na kategorie i warstwy aplikacji, wskazania, które wzorce są wadliwe i których należy się wystrzegać (antywzorce). Zaprezentujemy wiele pomysłów i technik wywodzących się z Javy, która jest podstawą inspirującą nasze pomysły. Powiemy, kiedy powinno się stosować dziedziczenie, a kiedy kompozycję i pisanie do interfejsu. Pokażemy wam, jak budować aplikacje, które są jednocześnie proste i elastyczne, czyli odporne na zmiany założeń. Zobaczycie, jak dzielić aplikacje na niezależne warstwy, które można wielokrotnie wykorzystywać i wymieniać, jeżeli zachodzi taka potrzeba. Na samym końcu poruszymy temat najnowszych trendów w programowaniu obiektowym i pokażemy, jak napisać i stosować kontener IoC, czy wykorzystać programowanie aspektowe (AOP - ang. Aspect Oriented Programing). W końcu powiemy, jak omawiane rozwiązania są wstanie współgrać w postaci jednego spójnego programu/aplikacji, który będzie stanowił kompletny przykład tego, jak dobrze i solidnie pisać w PHP z wykorzystaniem wzorców i pewnych uznanych za dobre praktyk programistycznych.
czy tylko ja nie moge obejrzec w wiekszych rozmiarach diagramu UML?
W artykuie zaproponowano podział wzorców projektowych na architektoniczne i programistyczne. Myślę, że lepsze byłoby wydzielenie wzorców typowo programistycznych z wzorców projektowych. Powstałby wtedy podział na wzorce projektowe i wzroce programistyczne, co byłoby chyba bardziej naturalne.