Ponieważ JavaScript wydaje się być wszechobecnym językiem programowania w Internecie w ciągu najbliższych kilku lat, nowe frameworki pojawiają się co pięć minut, a programowanie oparte na zdarzeniach zajmuje wiodącą rolę zarówno po stronie serwera, jak i klienta:
Czy jako programista Javascript uważasz, że tradycyjne wzorce projektowe są ważne lub mniej ważne niż w przypadku innych języków / środowisk ?.
Proszę wymienić trzy najlepsze wzorce projektowe, których programista Javascript regularnie używa, i podać przykład, w jaki sposób pomogły one w rozwoju Javascript.
javascript
design-patterns
node.js
Chwytak
źródło
źródło
Odpowiedzi:
Klasyczne wzorce projektowe nie dotyczą JavaScript.
Obowiązuje pisanie kodu modułowego i funkcjonalnego.
Powinieneś użyć kombinacji Konstruktorów i funkcji pierwszej klasy.
Jako programista JavaScript osobiście staram się traktować JavaScript jako LISP, a nie Java. Spróbuj więc emulować monady i kod funkcjonalny wysokiego poziomu zamiast próbować emulować klasyczny kod OOP.
Znów wzory projektowe nie mają tak wielkiego zastosowania, ale poniżej są trzy ważne konstrukcje.
new
Proszę zostawić jakiś kontekst, dla którego mogę pokazać przykłady tego rodzaju technik w porównaniu do robienia tego samego rodzaju kodu przy użyciu tradycyjnych wzorców projektowych.
Rzućmy okiem na niektóre klasyczne Wzory Projektowe i jak je wdrożyć w js, a także alternatywne wzory bardziej dostosowane do samego js:
Wzór obserwatora:
W
node.js
tym jest po prostuevents.EventEmitter
. WjQuery
tym jest$.fn.bind
&&$.fn.trigger
. Wbackbone
tym jestBackbone.Events.trigger
iBackbone.Events.bind
. Jest to bardzo powszechny wzorzec stosowany w codziennym kodzie.Nigdy nie zatrzymuję się i myślę „Hej, używam tutaj wzoru obserwatora!”. Nie, jest to tylko niski poziom przekazywania wiadomości lub sposób kaskadowej zmiany.
Na przykład w szkielecie wszystkie widoki MVC wiążą się ze
onchange
zdarzeniem modeli , więc zmiana modelu powoduje kaskadowe zmiany w widoku automatycznie. Tak, jest to potężny wzorzec, ale jego użycie jest tak powszechne w programowaniu sterowanym zdarzeniami, że nie zdawano sobie sprawy z używania go wszędzie.W
WebSocket
protokole mamy,.on
którego używamy do wiązaniaon("message", ...
zdarzeń. Znowu jest to bardzo powszechne, ale jest to obserwator na strumieniu, a nie oparty na klasycznym OOPwhile (byte b = Stream.ReadNextByte())
.Są to wszystkie potężne zastosowania wzorca Observer. Ale to nie jest wzór, którego używasz. To jest prosta część języka. To tylko kod.
Wzór pamiątkowy:
To jest po prostu JSON. Pozwala na serializację stanu obiektu, dzięki czemu można cofnąć akcję.
W JavaScript natywnie obsługujemy API dla pamiątek. Po prostu zdefiniuj metodę wywoływaną
toJSON
na dowolnym obiekcie. Kiedy zadzwoniszJSON.stringify
, wewnętrznie wywoła.toJSON
Twój obiekt, aby uzyskać prawdziwe dane, które chcesz serializować do JSON.To pozwala trywialnie tworzyć migawki twojego kodu.
Ponownie nie zdaję sobie sprawy, że to wzór pamiątkowy. Jest to po prostu użycie narzędzia do serializacji, jakim jest JSON.
Wzorzec stanu / wzorzec strategii:
Nie potrzebujesz wzorca stanu. Masz funkcje pierwszej klasy i typy dynamiczne. Wystarczy wstrzyknąć funkcje lub zmienić właściwości w locie.
źródło
Weź tę odpowiedź jako subiektywną opinię.
Jeśli masz na myśli tradycyjne wzorce projektowe, takie jak Gang of Four , wówczas większość technik jest agnostycznych dla języka / platformy, takich jak „Program do interfejsu, a nie implementacja” lub „Preferuj kompozycję obiektów nad dziedziczeniem klas” i są one równie ważne dla programistów JavaScript.
Bardziej szczegółowe wzorce, takie jak kreacyjne, strukturalne i behawioralne, mogą lub nie muszą być używane w taki sam sposób lub tak często, jak w innych językach, ponieważ cechy językowe mogą mieć duży wpływ na ich użycie. Dlatego niektóre języki (w tym JavaScript) mają własne wzorce projektowe oparte na oferowanej przez nich funkcjonalności lub składniowym cukrze.
Ogólnie powiedziałbym, że tradycyjne wzorce projektowe są równie ważne, jak w innych językach, ale wzorce specyficzne dla JavaScript są ważniejsze niż tradycyjne.
Spośród podstawowych wzorców projektowych JavaScript najczęściej używam tych:
1. Wzór konstruktora (z prototypami)
Zwłaszcza po stronie serwera podczas pisania rzeczy node.js, ponieważ dobrze nadaje się do pisania modułów, chociaż brakuje natywnej enkapsulacji. Jest również popularny wśród wielu programistów, jeśli przeglądasz repozytoria w GitHub, więc znajomość tego wzorca może pomóc lepiej zrozumieć inne kody.
2. Ujawnianie wzoru modułu
Oferuje modułowość z enkapsulacją.
3. Wzór SUCHY
Jest to raczej specyficzne dla scenariusza, chociaż każdy programista powinien z niego korzystać tak często, jak to tylko możliwe.
źródło
Wzory projektowe są nauczane w klasach projektowania dla CS. Nie są one niezbędne, ale naprawdę pomocne, jeśli można znaleźć analogiczne sytuacje, aby uzyskać przemyślane rozwiązanie.
Pozwala także programiście na łatwiejszą komunikację. Możesz również porozmawiać ze swoim współpracownikiem w kwestii wzorów. Jeśli powiesz tutaj, że mam mojego obserwatora, to całkiem dobrze rozumiem, co się dzieje.
Ludzie naturalnie wymyślą rozwiązania, które same pasują do wzorca projektowego, ale wzorce projektowe pomagają zdefiniować terminologię i standardowe pomysły, które mogą być pomocne.
Nie ma nic nadzwyczajnego w wzorach, najmilszą rzeczą jest to, że są to pomysły kanonizowane i definiowane w sposób, który jest wielokrotnie użyteczny.
źródło
Są niezbędne.
Jest tak, ponieważ koncepcje rozwiązań wielokrotnego użytku mogą wykraczać poza język. - zmiany składniowe - zmiany implementacyjne - Pojęcie wzorca nadal istnieje.
Programiści z dowolnego języka mogą uczyć się zaawansowanego JS, ucząc się wzorców, a nie składni. Tych, którzy nie wiedzą o tym, brakuje.
Są często używane wzorce, przeciwko którym niektórzy „argumentują”. Warto je jednak wiedzieć, ponieważ są niezwykle popularne i zaawansowane w zaawansowanym JS.
1- Przestrzeń nazw - zawiń swój kod w obiekcie.
var x = (function () {}) ();
2 - Konfiguracja obiektów, wzór podobny do fabrycznego. -Pass obiektu do funkcji, a nie kilka zmiennych.
var produkt = fabryka ({});
3- Funkcja oddzwaniania. - Przekaż funkcję jako parametr, która zostanie wywołana po zakończeniu zadania.
funkcja longTask (function () {// zadzwoń do mnie po zakończeniu});
Jak powiedziałem, niektórzy mogą twierdzić, że nie są to wzorce, ale są one bardzo powszechne i bardzo potężne, i należy o nich wspomnieć, ponieważ są one rzeczywiście bardzo przydatnymi rozwiązaniami wielokrotnego użytku do typowych problemów. Co jest definicją wzorca projektowego.
Doskonałe pytanie.
Mam nadzieję, że to pomaga.
źródło