Co to jest programowanie oparte na wzorcach?

16

Czy ktoś może wyjaśnić obsesję na punkcie wzorców i anty-wzorców w programowaniu? Pytam, ponieważ absolutnie nie mam pojęcia, co oznaczają te wzory. W obliczu zadania programistycznego przez chwilę myślę o tym problemie, zapisz niektóre struktury danych, które moim zdaniem będą odpowiednie, prototypuj rozwiązanie, rozdziel niektóre moduły i iteruj. Nigdzie nie sądzę, że „Och, potrzebuję tutaj wzoru FunkyLookyTastic”.

davidk01
źródło
12
Obsesja na punkcie wzorów jest w pewnym sensie anty-wzorem
Anto
1
Co do ostatniego punktu, częściowo się zgadzam. Wymienię kilka wzorów, ale niektóre wzorce z podręczników wydają się być mniejszymi wariantami, a interesujący jest zazwyczaj sposób dostosowania wzoru do konkretnego przypadku, więc na pewno nie powinieneś być dogmatyczny w stosunku do rzeczy.
Steve314,
1
Czy programujesz w języku dynamicznym? Wiele wzorców, o których wspominają ludzie, to sposoby na obejście ograniczeń w Javie.
johncip
Ponadto, traktowanie każdego problemu osobno nie jest skalowane wraz z rozmiarem zespołu. Na przykład w środowisku MVC modele są często znormalizowane, ale widoki mogą zajmować się danymi pochodnymi. Jest na to kilka sposobów, ale ludzie nie powinni rozwiązywać tego problemu (potencjalnie inaczej) za każdym razem, gdy się napotyka. A inni czytający kod nie powinni wiedzieć, w jaki sposób problem X został rozwiązany w tym przypadku, w przeciwieństwie do wszystkich innych.
johncip

Odpowiedzi:

19

Wzór jest powszechnym podejściem do rozwiązywania typowego problemu; nic więcej i nic mniej. Znając je i rozumiejąc, możesz skorzystać z doświadczeń innych ludzi, aby poprowadzić Cię w kierunku rozwiązania, które okazało się skuteczne, uniknąć pułapek napotkanych w przeszłości i omówić rozwiązanie przy użyciu terminologii znanej innym, którzy znać ten wzór.

Oczywiście możesz wymyślić dobre rozwiązanie bez wyraźnego użycia wzorca, a równie dobrze wymyślić złe rozwiązanie, próbując zastosować wzór, który tak naprawdę nie pasuje do konkretnego problemu. Myślę, że obserwowana przez ciebie „obsesja” na ogół pochodzi od ludzi, którzy właśnie odkryli tę koncepcję, i uważam, że ma ona większą moc niż jest w rzeczywistości. Większość ludzi szybko je rozpozna po tym, czym są: przydatne narzędzie, a nie magiczna kula.

Z drugiej strony anty-wzorce są często obserwowanymi zachowaniami, które mają tendencję do obniżania jakości kodu. Ponownie, warto znać i rozumieć niektóre z nich, aby uniknąć takiego zachowania i spróbować je poprawić (uzasadnionymi argumentami), gdy zaobserwujesz go w innych. Niektórzy opisaliby nadużycie wzorów jako anty-wzór.

Mike Seymour
źródło
1
Na przykład słynne zgrupowane zorientowane obiektowo wzorce czterech obiektów zostały opracowane na podstawie doświadczeń autorów i osób, z którymi mieli kontakt. Powód, dla którego niektóre wzorce mają kilka nazw - zostały niezależnie opracowane i nazwane kilka razy. Większość programistów w naturalny sposób wymyśli na nowo kilka wzorców pozostawionych własnym urządzeniom - i oczywiście kilka anty-wzorców.
Steve314,
3
obserwowana przez ciebie „obsesja” zazwyczaj pochodzi od ludzi, którzy właśnie odkryli tę koncepcję - głównie prawda, IMHO. są tacy, którzy uważam, że musisz podejść do problemu z gotowymi wzorcami ... a jeśli twoje rozwiązanie nie zawiera oczywistych wzorców, to twoje rozwiązanie jest złe ... powinniśmy poświęcić czas na naukę wzorców, w jaki sposób są używane, a kiedy i kiedy nie należy ich używać - są częścią naszego zestawu narzędzi
IAbstract
9

Wzory są zarówno destylowaną wiedzą programistów w książce kucharskiej, jak i użytecznym sposobem komunikowania się programistów.

Jak sugerują inne odpowiedzi, wzorce naprawdę są powszechnymi rozwiązaniami typowych problemów. Korzyścią jest to, że często można uzyskać lepsze rozwiązania, korzystając z istniejącego wzorca lub odkryć prawdopodobne pułapki przed rozpoczęciem kodowania.

Inną korzyścią jest rozmowa z kimś o kodzie. Wzory to inny rodzaj żargonu, który skraca długie opisy w kilku słowach. Spróbuj wyjaśnić „wtedy fabrycznie dodaje obserwatora” bez odwoływania się do wzorów. Możesz to zrobić, ale zajmuje to dużo czasu.


źródło
2
+1 za komunikację. Codzienna rutyna przebiega znacznie płynniej, gdy wszyscy są na tej samej stronie i mają wspólny leksykon.
Ampt
3

Większość programistów zwróci uwagę na każdy nowy paradygmat lub metodologię, która się pojawi. Zrobiłem to, kiedy po raz pierwszy usłyszałem o wzorcach projektowych. Wzory projektowe są właśnie tym, co sugeruje nazwa: projekt lub szablon do tworzenia klas i modelowania ich zachowania i interakcji w przewidywalny sposób

Spójrz na domy. Mają pewne podobieństwa. Każdy dom ma salon, kuchnię, sypialnię, łazienkę, toaletę na minimum. Nikt nie zbuduje domu bez łazienki, prawda? Apartamenty mają inny wzór niż bunglows. Zamki mają zupełnie inny wzór. Ubrania też mają wzory. Kurtka i formalna koszula mają ten sam podstawowy projekt, ale mają różne zachowania: nie będziesz nosić kowbojskiej kurtki na rozmowę kwalifikacyjną. Podobnie klasy i ich działania można pogrupować według ich zachowania i projektu. Patrzenie na wspólne elementy ich zachowań daje wzorce projektowe dla klas.

Rozumiem, że wzorce projektowe są ważne tylko wtedy, gdy głównym problemem są możliwość ponownego użycia i rozbudowy. Jeśli tworzysz małe aplikacje (powiedzmy mniej niż 10 klas), możesz ich wcale nie potrzebować. Ale duże projekty, szczególnie te, w których pracują duże zespoły i mają długie cykle konserwacji i dodawania funkcji, na pewno będą wymagały wzorców. Nie jest to nawet opcja w dużych projektach.

Rzuć okiem na samouczki online na temat wzorów. Wikipedia ma dobry zestaw artykułów. Ta strona też jest dobra: http://sourcemaking.com/ . Jeśli jesteś doświadczonym programistą, przekonasz się, że natknąłeś się na kilka wzorców, być może nawet sam zaimplementowałeś coś podobnego, nie znając tego po konkretnej nazwie.

Nie ignoruj ​​ich całkowicie! Możesz je uznać za przydatne w przyszłości, jeśli nie teraz. Kluczem do podejścia do wzorców projektowych z otwartym umysłem jest pytanie: „Co się stanie, jeśli nie użyję wzorów projektowych?” Wzory nie są rozumiane jako „lekarstwa” (chociaż można ich użyć jako lekarstwa na problem); raczej ucieleśniają powiedzenie „lepiej zapobiegać niż leczyć”.

Niemniej jednak przestrzegałbym przed obsesją na punkcie wdrażania wzorców, gdziekolwiek i kiedykolwiek zobaczysz niewielki pretekst do ich użycia. Problem ten napotkałem w jednym projekcie, w którym architekt był przekonany, że bez DP projekt byłby całkowitą katastrofą. Zebraliśmy się na spotkaniu grupowym, podczas którego inżynierowie zmienili projekt i wskazali, że wiele wzorów, które on polecił, w ogóle nie miałoby sensu, poza pokazaniem „wow, patrzcie na piękne wzory”. Potrzeba było wielu przekonujących i pewnych negocjacji, aby zmniejszyć liczbę miejsc, w których wzory były wykorzystywane tylko do potrzeb.

DPD
źródło
1

Ludzie, którzy odpowiedzieli, mają rację, jeśli chodzi o „programowanie oparte na wzorcach”, jak zwykle się uważa. Mam nieco inną definicję, która wydaje mi się bardziej odpowiednia do tego, co robię i zwykle używam „programowania opartego na wzorach” do opisania podejścia opartego na wtyczkach, a nie planowania.

Ponieważ programuję wtyczki jQuery, wtyczkę chmurową CMS i wtyczki eCommerce, „programowanie oparte na wzorcach” z tej perspektywy oznacza przyjrzenie się podstawowej technologii i istniejącym przypadkom użycia i trafienie w te najbardziej istotne statystycznie. W szczególności wtyczki muszą być bardzo oparte na wzorcach, aby dobrze pasowały do ​​kontekstu programowania.

Najlepiej jest jednak zastosować wzorzec PO Widzeniu prawidłowych przypadków użycia w wielu projektach, aby był statystycznie poprawny do ponownego użycia.

Jason
źródło