Wzorce projektowe – praktyczne (nie) zastosowanie.

Posted on Posted in Java SE

O wzorcach projektowych słyszał zapewne każdy programista mający coś wspólnego z językiem obiektowym , a więc programista języka Java również. Kanoniczne wzorce projektowe stworzone przez GOF (Gang of Four) są przedmiotem niejednych zajęć na kursach programowania a także częstym tematem rozmów rekrutacyjnych.

A jak wygląda to w natłoku codziennej pracy? No cóż … bywa różnie.

Napięte terminy to codzienność życia programisty, biznes oczekuje wyników w krótkim terminie – „ma działać, musimy zdążyć” – słyszysz prawie codziennie .Ty chcąc spełnić te podstawowe oczekiwania, bądź co bądź Twojego chlebodawcy, prześcigasz się sam ze sobą aby oddać funkcjonalność zgodną z założeniami i wybierasz drogę na skróty.

W codziennej pracy często widzisz, że można byłoby pokusić się o wdrożenie bardziej wyszukanego rozwiązania, ale boisz „zagrzebać się” we własnym kodzie i górnolotnych pomysłach.

Droga na skróty oznacza :

– „Robię tak by działało, a najwyżej w wolnym czasie zrobię refactoryzacje do wzorców projektowych”
W wolnym czasie? A to dobre – kogo chcesz oszukać?

A później jest tak, że Ty albo ktoś inny wracacie do kodu, w którym trzeba  coś  dorobić i cóż się dzieje :
– widzisz 7 if-ów , więc nic nie szkodzi by dodać ósmy. Przecież jak ktoś zrobił siedem to może być osiem.
– Szósty konstruktor… cóż… skoro jest potrzebny… itp., itd.

Czemu tak się dzieje ?

Odpowiedzi jest kilka i moim zdaniem składają się w pętle , której dopóki się nie przerwie trudno jest coś zmienić .

Algorytm szybkiej implementacji

Jako programiści chcemy jak najszybciej wdrożyć wymagane funkcjonalności więc sięgamy do sprawdzonego „arsenału prostych środków” by mieć pewność że zdążymy. Nie mamy czasu wdrażać się w praktyczne stosowanie wzorów projektowych więc nie czujemy się w nich mocni, co powoduje że nie trafiają one do w/w „arsenału prostych środków” . Pętla powtarza się.

Rozwiązanie?
Algorytm poprawnej implementacji

Znaleźć czas 🙂  no dobra wiem nie jest łatwo… ale przynajmniej spróbować znaleźć czas, gdyż to warunek podstawowy i skupić się na wytypowaniu najważniejszych , czytaj możliwych do najpowszechniejszego stosowania wzorcach projektowych. Przećwiczyć je na przykładowym kodzie, czynność powtórzyć tyle razy, aż wejdą w krew.

Od czego zacząć?

MVC – chyba najpopularniejszy wzorzec projektowy i taki, którego stosowanie powinno przyjść nam najłatwiej . Pisząc Nasz kod starajmy się, aby każda warstwa była odpowiedzialna dokładnie za jedną rzecz, nie zamykajmy elementów logiki w widoku np. poprzez stosowanie instrukcji warunkowych, niech za to co będzie wyświetlone odpowiedzialny będzie kontroler – od tego jest. Z kolei kontroler niech nie będzie miejscem procesowania logiki biznesowej aplikacji ani współpracy z warstwą składowania – takimi rzeczami powinny zajmować się serwisy i repozytoria. Zapewni nam to dużo większą elastyczność kodu, a uważne pilnowanie tych zasad nauczy nas działania w zgodzie ze wzorcem, a to ważna zmiana w myśleniu .

Co dalej?

No dobrze nasza aplikacja spełnia wszelkie kryteria aby określić ją mianem napisanej zgodnie ze wzorcem MVC, ale wszystko inne to już totalna samowolka, w której próżno szukać rozwiązań z GOF lub innych wzorców.  Jest to niewątpliwie dobry moment aby zastanowić się nad tym jakie wzorce projektowe warto poćwiczyć by weszły nam „ w krew”  i stały się dla nas intuicyjne, a z jakimi możemy się zapoznać wtedy gdy faktycznie uznamy to za niezbędne.

Otóż do wzorców wartych uwagi – czyli tych które faktycznie często wykorzystamy podnosząc elastyczność naszego kodu zaliczyć moim zdaniem należy :

Abstrakcyjna Fasada

Dekorator

Stan

Metoda Fabrykująca

Null Object

Builder

Strategia

Singleton

Jak na dobry początek powinno wystarczyć.

Wyrobienie w sobie automatyzmu dostrzegania możliwości zastosowania wzorca jak i jego praktycznego wdrożenia go do kodu wymaga od Nas pewnego poziomu samozaparcia. Z pewnością będziemy musieli poświecić nie jedno popołudnie na przerobienie sobie przykładów dla każdego z nich tak by „nie zadrżała nam ręka” przy podejściu do implementacji, co mogło by skutkować powrotem do „strefy komfortu” i wykorzystaniu starych dobrych sprawdzonych sposobów.

Dobrze jest też znać ogólne zasady stosowania wzorców, by wiedzieć kiedy warto pomyśleć o ich implementacji.

Pora przejść do ogólnego omówienia praktycznego zastosowania poszczególnych wzorców:

Null Object

– Builder (GOF) + Builder (alternatywa)

– Stan

– Singleton

– Dekorator

Strategia

 

Przykłady wzorców projektowych można znaleźć na naszym repozytorium BitBucket tutaj.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *