Wzorce programistyczne – Fabryka abstrakcyjna (Abstract Factory) w C++ i PHP

Wzorzec programistyczny typu Abstract Factory jest jednym ze wzorców służących do tworzenia obiektów. Jest to rozszerzony przypadek innego wzorca programistycznego – klasycznej Fabryki. W klasycznym wzorcu typu Fabryka, klasa fabrykująca posiadała metody, które tworzyły instancje obiektów. Możliwe było dziedziczenie z takowej Fabryki w celu nadpisywania odpowiednich metod i tym samym zmienianie poszczególnych sposobów kreacji. W przypadku Fabryki Abstrakcyjnej posuwamy się o jeden krok wyżej. Mamy kilka Fabryk udostępniających ten sam interface i w zależności od okoliczności, powołujemy do życia inną Fabrykę służącą użytkownikowi do kreacji obiektów. Użytkownik jest odseparowany i nie informowany o faktycznych typach obiektów, a jedynie posługuje się wspólnym interfacem.

Czytaj całość...

Wzorce programistyczne – Dekorator (Decorator) w C++ i PHP

Wzorzec programistyczny typu Dekorator jest bardzo wygodnym sposobem wzbogacania (dekorowania) obiektu w czasie rzeczywistym. Efekt ten jest osiągany poprzez wrappowanie instancji obiektu w kolejne instancje, które dodają do obiektu bazowego kolejne funkcjonalności.

Wzorzec opiszę na 2 przykładach. Pierwszy będzie to przykład oparty o PHP i zaczerpnięty z frameworków do tworzenia stron WWW. Będziemy chcieli osiągnąć efekt wrapowania tagów HTML w kolejne tagi. Dla przykładu:

$box1 = new Div(new Link( new Image() ));
$box1->printOut();

Powyższy kod ma dać w efekcie wydruk na ekranie w postaci:

<div><a><img /></a></div>

Czytaj całość...

Entity-attribute-value (EAV) model

W standardowym podejściu do projektowania bazy danych, tworzymy tyle tabel ile mamy encji, a w każdej tabeli, tworzymy tyle kolumn ile dana encja ma atrybutów. Rozwiązanie to sprawdza się w relatywnie nieskomplikowanych projektach. Istnieją jednak 2 sytuacje, gdzie takie zwykłe rozwiązanie może powodować poważne problemy.

1. Jeżeli dana encja ma wiele atrybutów, ale nie są wykorzystywane naraz, to otrzymamy sytuację, gdzie tabela będzie posiadać bardzo wiele pustych miejsc. Z matematycznego punktu widzenia, nazywa się to macierzą rzadką i wymaga znacznie więcej miejsca i obliczeń niż jest to absolutnie niezbędne.

2. Kiedy tworzymy aplikację, która ma spełniać zadanie frameworku programistycznego, powinniśmy dać programiście możliwość dostępu do bazy danych. Jednak, zmiana struktury bazy danych za każdym razem, gdy programista chce tworzyć nowe atrybuty i encje wiąże się z licznymi negatywnymi konsekwencjami m.in. dotyczącymi bezpieczeństwa, integralności, czytelności itd.

Właśnie dlatego powstał wzorzec programistyczny o nazwie EAV, szeroko stosowany np. przez system Magento.

Czytaj całość...