18 czerwca 2018

Trochę O Wzorcach


Czy możesz wymienić Wzorzec Projektowy?
Wzorzec Projektowy? Masz na myśli te z lat 90-tych?
Tak, one stały się popularne w 1995. Chociaż są znacznie starsze.

Poniższy tekst jest luźnym tłumaczeniem wpisu bloga Roberta Cecila "Wujka Boba" Martina ze strony :


Proszę o komentarze, jeżeli ta luźność jest zbyt daleko posunięta.


Była tam też książka, prawda?
Napisana przez czterech gości.
Właśnie tak, "Gang Czterech": Eric Gamma, Richard Helm, Ralph Johnson, i John Vlissides.[1]
To już raczej staroć i dziś nie na czasie, co?


Co masz na myśli?
Cóż, są nowsze książki.
Rzeczywiście, jest wiele nowszych książek na ten temat i niektóre są całkiem dobre; ale żadna nie jest tak wpływowa i wnikliwa jak oryginał.
Tak czy siak cały pomysł jest stary i trefny.
Trefny?
No tak, słyszałem, jak mówiono, że Wzorce Projektowe były wymyślone po to, żeby naprawić jakieś problemy w Programowaniu Zorientowanym Obiektowo.
Jakieś problemy? Jakie problemy?
No pojęcia nie mam. To tylko to, co słyszałem. Że, Wzorce Projektowe były tylko obejściem dla złych języków.
Złych języków? Jakich języków?
No nie wiem - no na przykład, może C++ albo Java. No wiesz Statycznych języków.
Może dziwnie to zabrzmi. Smalltalk, język dynamiczny, grał tam znaczącą rolę.
Cóż, w każdym razie, tak naprawdę nie da się ich zastosować w przyszłości, w Programowaniu Funkcyjnym i w ogóle.
O Niebiosa! Co za bzdury!
Cóż, to jest to co słyszałem.
Myślę, że słuchasz niewłaściwych ludzi.
To był tylko Twitter i Facebook i te rzeczy.
Aaa, rozumiem. Sieci Społecznościowe: Skarbnica wszelkiej mądrości i wiedzy.
Taaa, OK, rozumiem co chcesz przez to powiedzieć.
No mam nadzieję, ale żeby była jasność ....
To mówią politycy, którzy właśnie zamierzają cię okłamać.
.... (eeech) .... Posłuchaj .... Uważnie. Książka Wzorce Projektowe jest jedną z najważniejszych książek, jeżeli nie TĄ najważniejszą książką, traktującą o oprogramowaniu w przeciągu ostatnich 20 lat.
Oj, no daj spokój. Ona ma 20 lat. To znaczy, może była świetna w latach dziewięćdziesiątych; ale mamy jakby wiek dwudziesty pierwszy. Mamy Ruby. Mamy Clojure. Mamy Node, i Angular, i Rails i iOS i Platformy Mobilne i .... to znaczy ... Oprogramowanie zmieniło się bardzo! Wyrośliśmy z tych staroci.
Myślisz, że oprogramowanie zmieniło się w przeciągu ostatnich 20 lat?
Cóż, oczywiście! To znaczy ... No ba.
Musisz się jeszcze dużo nauczyć co znaczy słowo "Zmiana". W rzeczywistości, podstawy oprogramowania zmieniły się niewiele w przeciągu ostatnich czterech dekad.
Jak możesz tak mówić? To znaczy, zobacz na te wszystkie nowe rzeczy!
Masz na myśli błyskotki?
Błyskotki!! Nazywasz Rails, i Angulara, i Node'a błyskotkami?
Tak. Błyskotkami. Pobłyszczy przez chwilę, ale nie trwa to długo. Zawsze jest dużo błysku, za którym można pójść.
Ale są tam całkiem fajne pomysły w tych frameworkach. Jak możesz to nazywać błyskotkami?
Pomysły nie są błyskotkami. To frameworki są nimi. Większość pomysłów w tych frameworkach jest stara. Są z nami od dziesięcioleci. Te pomysły to ... Wzorce Projektowe.
Czekaj. Mówisz, że Active Record jest wzorcem projektowym?
Oczywiście, że jest. Lub raczej jest kilka Wzorców Obiektowych w środku Active Record. Active Record jest unikatową kombinacją wielu bardzo starych, wypróbowanych i prawdziwych wzorców projektowania oprogramowania.
OK. Zatrzymajmy się na chwilę. To co to jest wzorzec projektowy?
Wzorzec Projektowy jest nazwaną i uznaną formą połączenia struktur i procedur, które udowodniły swoją użyteczność na przestrzeni lat.
Nazwaną? Uznaną? Że, co?
Tak, każdy Wzorzec Projektowy ma swoją nazwę i uznany kształt. Profesjonalni projektanci oprogramowania używają tych nazw i kształtów do komunikowania się między sobą. Jeżeli widzą nazwę wzorca w oprogramowaniu, bądź rozpoznają kształt, od razu mogą poznać intencję projektanta.
Czy możesz podać mi jakiś przykład?
Pewnie, oto dwa, których nie ma w książce Wzorce Projektowe. Model-View-Controller i Wstrzykiwanie Zależności (Dependency Injection).
To są Wzorce Projektowe?
Oczywiście. Mają dobrze znaną nazwę i mają uznany kształt.
Rozumiem temat nazwy, ale o co chodzi z tym kształtem?
No więc, weźmy MVC. Oczekujesz, że będą tam trzy obiekty, obiekt modelu, obiekt kontrolera i obiekt widoku. Model zarządza regułami biznesowymi. Kontroler zarządza wejściem. Widok zarządza wyjściem.
I wrzucam modele, widoki i kontrolery w różne katalogi.
Eeech, cóż. Tak! W niektórych frameworkach stało się to częścią uznanej formy.
Co masz na myśli mówiąc w niektórych frameworkach?
Tylko tyle, że w oryginalnej specyfikacji MVC katalogi nie były wymienione. W rzeczywistości oryginalny kształt MVC jest dużo bardziej skomplikowany od tego co przed chwilą opisałem; ale to inna historia.
To znaczy, że jest w MVC więcej niż tylko trzy katalogi i trzy typy obiektów?
(chichot) Oooo, tak. Dużo, dużo więcej. Ale o tym później.
OK, zaczynam rozumieć pomysł. Jeżeli powiem "Wstrzykiwanie Zależności", wszyscy wiedzą dokładnie, co mam na myśli. Więc nie muszę się tłumaczyć.
Dokładnie. Pozwala to oszczędzić wiele czasu wtedy, kiedy wszyscy projektanci znają Wzorce Projektowe. Mogą po prostu, rozmawiać ze sobą używając tych nazw.
OK, czyli jeśli podążę za formą wzorca, to wszyscy będą wiedzieć czego mogą się spodziewać w kodzie.
Tak, właśnie. Poprzez podążanie za uznaną formą, odciążasz wszystkich innych od pracy odszyfrowania tego, co właśnie zrobiłeś. Oni rozpoznają kształt i mogą łatwo za nim podążać.
I mówisz, że jest mnóstwo tych wzorców?
Książka Wzorce Projektowe podaje nazwy i kształty dwudziestu trzech wypróbowanych i prawdziwych rozwiązań na częste problemy oprogramowania.
Hmmmm. Chyba powinienem był się ich kiedyś nauczyć.
Bez wątpienia! Czy potrafisz podać choć jeden?
Eee...
Chociaż jeden.
Eee...
Pomogę Ci. Fabryka Abstrakcyjna (Abstract Factory), Budowniczy (Builder), Metoda Wytwórcza (Factory Method), Prototyp (Prototype), Singleton, Adapter, Most (Bridge), Kompozyt (Composite), Dekorator (Decorator), Fasada (Facade), Pyłek (Flyweight), Pełnomocnik (Proxy), Łańcuch Zobowiązań (Chain of Responsibility), Polecenie (Command), Interpreter, Iterator, Mediator, Pamiątka (Memento), Obserwator (Observer), Stan (State), Strategia (Strategy), Metoda Szablonowa (Template Method), i Odwiedzający (Visitor).
Chyba mam dużo do nadrobienia
Tak, myślę, ze masz.

[1] John Matthew Vlissides odszedł 24 listopada 2005 roku. Był kolegą i przyjacielem. Pomógł mi wiele razy. Brakuje mi Go.




Powyższy tekst jest luźnym tłumaczeniem wpisu bloga Roberta Cecila "Wujka Boba" Martina ze strony :


Proszę o komentarze, jeżeli ta luźność jest zbyt daleko posunięta.

Brak komentarzy:

Prześlij komentarz

Podstawy Programowania Funkcyjnego Epizod 3

Czy wszystkie Zasady Się Zmieniają? Kiedy tylko zaczynamy używać nowego paradygmatu , porównujemy z nim na...