Które wzorce projektowe na początek?

Które wzorce projektowe na początek?
EI
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 2 lata
0

Wiem że warto znać wzorce projektowe, jednak jakoś do tej pory nie mialem potrzeby ich używania. Których waszym zdaniem wzorców najczęściej się używa, a których nie warto sie uczyć. Pytanie może bardzo ogólne, ale od czegoś trzeba zacząć. Na początek polecial mvc, nie licze na odpowiedzi w stylu Naucz sie wszystkich ;)

szweszwe
MVC nie jest wzorcem projektowym.
Shalom
@szweszwe a niby czym? o_O
RA
@Shalom wzorcem architektonicznym
Shalom
No a czym są niby te wzorce architektoniczne jak nie podklasą wzorców projektowych? o_O
RA
@Shalom nie wiem
szweszwe
@Shalom Raczej wzorce projektowe mogłyby być podklasą wzorców architektonicznych. Niemniej jednak są one raczej rozróżniane i wiadomo czego się spodziewać jak ktoś mówi o jednych albo o drugich.
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
4

Najbardziej przydają się te "oczywiste" których wielu ludzi używa nawet o tym nie wiedząc:
Strategy, Template Method, Adapter, Facade, Builder, Factory, Decorator


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
IceHeart
A singleton ? :D
Lectre
Singleton jedyny słuszny wzorzec.
MO
Singleton to "Disco Polo" wzorców projektowych. Należy go poznawać na końcu :-)
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
4

Możesz poznać różne wzorce projektowe - to nie szkodzi. Ale mam taką prośbę - nie staraj się ich używać. (chyba, że potrzebujesz do CV).

Z ciekawostek tu Mario Fusco opowiada które wzorce są już bez sensu (w Javie 8):

a tu Ted Neward , które wzorce służyły tylko łataniu słabości języka programowania
https://vimeo.com/110814038


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
Zobacz pozostałe 5 komentarzy
jarekr000000
Uważam, że lepiej opanować szersze pojęcie "high order function" i się nim posługiwać. Niż li tylko znać jego kilka szeczóglnych implementacji (znanych jako pewne "wzorce projektowe").
LukeJL
nie rozumiem, dekorator w programowaniu funkcyjnym można używać bardzo często, tyle że to się nazywa np. high order function.
LukeJL
przynajmniej dla mnie zrobienie funkcji, która bierze jako argument inną funkcję jest tożsame z dekoratorem.
jarekr000000
A może Strategia, a może Command, a może Visitor,a może ... ;-)
LukeJL
noo, to zależy od sytuacji. Akurat pomyślałem o dekoratorze, ale faktycznie, jakby wziąć konkretny kawałek kodu, to by mogło się okazać, że te wspomniane wzorce by idealnie pasowały do danego kawałka kodu.
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

Tak jak napisał @Shalom jest dużo wzorców projektowych które są stosowane często nieświadomie,np. :
Decorator - http://stackoverflow.com/questions/6366385/decorator-pattern-for-io
Template Method - http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html
Strategy -https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html - możesz na przykład mieć jakąś kolekcje i na podstawie tego czy naciśniesz dany button taka będzie wykorzystana implementacja komperatora


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
edytowany 1x, ostatnio: scibi92
jarekr000000
No akurat JdbcTemplate to mocno zdegenereowany przykład na Template Method :-)
S9
W jakim sensie? No w sumie jest to troche racja
jarekr000000
W takim, że to Callback(i), Strategie czy jak tam sobie je chcesz zwać.
W0
JdbcTemplate to raczej fasada na to wszystko, co dzieje się pod spodem.
forsberg
  • Rejestracja:prawie 18 lat
  • Ostatnio:około rok
  • Lokalizacja:Trójmiasto
0

Wszystko zależy od tego, co chcesz stworzyć. Mam taką starą książkę J2EE, w której jest sporo "niestandardowych" wzorców, choć de facto nie są niestandardowe, tylko obecnie nie tak popularne, jak kiedyś. To było jeszcze w czasach, gdy Java Spring był mało popularny.

Wg. mnie najbardziej istotne wzorce to m.in. Observer, Dependency Injection, Strategy, oczywiście MVC (tak tak, to wzorzec projektowy - architektoniczny - de facto wszystkie wzorce projektowe dotyczą, how surprising, projektowania, czyli architektury), Provider (tudzież Bridge), Adapter. Na początek te, plus wypisane powyżej, i wystarczy IMO.

PO
  • Rejestracja:około 8 lat
  • Ostatnio:około 8 lat
  • Postów:7
1

"Możesz poznać różne wzorce projektowe - to nie szkodzi. Ale mam taką prośbę - nie staraj się ich używać."
Nie wiem czy dobrze zrozumiałem, ale właśnie to wzorce projektowe są jednym z fundamentów tego, że możesz rozczytać się w czyimś kodzie nie ruszanym od paru lat. Oczywiście bez sensu jest ich używanie na siłę, żeby było więcej wzorców, ale chyba nie można zakwestionować tego, ile wnoszą do projektu
Jest coś takiego jak zasady SOLID, z niej wynikają wzore projektowe, a z nich z kolei dobre praktyki programowania :)

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
2

A to ciekawe - gdzie dokładnie z reguł SOLID wynikają wzorce projektowe? A z wzorców dobre praktyki ?
Ale co jak zrobie wszystko na Singletonie - to jest od razu dobrze (bo jest wzorzec)?

Wzorce bardzo pomagają komunikacyjnie - możesz nazwać co zastosowałeś, ale IMO to powinno przebiegać tak:

  • piszę kod, poprawiam, minimalizuję ... i widzę, że to jest jakiś wzorzec (ale tylko ewentualnie- nie jest to moim celem).

Natomiast Stary Kod najczęściej mi mówi : oho! w 2009 ten programista ogarnął Strategy no i powrzucał gdzie się dało.

Właśnie widzę , że dziś jeszcze nigdzie Brigde nie użyłem (zaraz poprawie).


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 4x, ostatnio: jarekr000000
PO
  • Rejestracja:około 8 lat
  • Ostatnio:około 8 lat
  • Postów:7
0

@jarekr Może nie do końca dobrze się wyraziłem. Wzorce projektowe nie łamią zasad SOLID. Możesz zauważyć, że większość z popularnych wzorców (nie będę się upierał, że wszystkie, bo się aż tak nie interesowałem) przestrzega tych zasad. Przykłady: strategia i zasada LSP, template method i ocp, fabryka abstrakcyjna i DIP.
Z wzorców naturalnie wynikają dobre praktyki. Wierz mi, że lepiej jest oglądać oklepaną do bólu strategię niż własne próby wymyślenia jakichś fantazyjnych wzorców :)
Singleton jak zapewne wiesz jest bardzo często używany jako antywzorzec, więc akurat tego bym unikał.
Jako przykład dobrej praktyki: zdecydowanie lepiej czyta się chain of responsibility albo strategię niż ogromniastego switcha albo else-ifa nawet gdyby implementacje klas biorących udział w łańcuchu/strategii były banalne (zawsze zostawiasz sobie zabezpieczenie na przyszłość, gdyby wymagana funkcjonalność mogła urosnąć)

edytowany 2x, ostatnio: polmos
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
2

Ta strategia i LSP to akurat przykład wymagający mocnej wyobraźni.... (ale ponieważ LSP jest niejako podstawą programowania obiektowego - więc ... jasne).

Natomiast nie zgadzam się co do wynikania.

Dobre praktyki (o ile są jedne.. (a nie ma) ) są niezależne od wzorców.
Niektóre wzorce w w dobrym kodzie nie przeszkadzają. Początkujacym programistom czasem pomagają odnaleźć rozsądne rozwiązania.

Problem polega na tym, że większość tłuczonych w książkach i na rozmowach wzorców została opisana w połowie lat 90-tych.
Troszkę się zmieniło od tego czasu. (Wtedy myślałem, że będę tylko wybierał wzorce z palety i budował systemy w UMLu - nawet był taki soft Together, który to całkiem nieźle robił).
Wyszła z tego niejedna masakra i dużo kasy spłonęło w wygenerowanych kodach....


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 godziny
  • Postów:3544
4

Widzę, że zaczęła się dyskusja pod tytułem "Czy wzorce projektowe mają sens?" po raz tysięczny.

  1. Wzorce projektowe to sprawdzone sposoby na rozwiązywanie konkretnych problemów.
  2. Użycie wzorców projektowych nie gwarantuje rozwiązania problemu.
  3. Wzorce projektowe nie są jedynymi sposobami na rozwiązanie danego problemu.
  4. Wzorce projektowe nie muszą też być najlepszym sposobem rozwiązania problemu.
  5. Z moich obserwacji - ludzie potrafiący napisać coś, co w danym przypadku lepiej się sprawdzi od wzorca w 95% przypadkach znają te wzorce.

Odpowiadając na pytanie autora - najlepiej, żebyś poznał wszystkie z GoF: http://www.mcdonaldland.info/2007/11/28/40/

LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:minuta
  • Postów:8403
2

Wiem że warto znać wzorce projektowe, jednak jakoś do tej pory nie mialem potrzeby ich używania.
Których waszym zdaniem wzorców najczęściej się używa, a których nie warto sie uczyć.
Pytanie może bardzo ogólne, ale od czegoś trzeba zacząć. Na początek polecial mvc, nie licze na odpowiedzi w stylu Naucz sie wszystkich ;)

Wzorce to buzzword. Coś co zostało wymyślone po fakcie. Kiedyś czterech autorów książki chciało usystematyzować wiedzę na temat programowania, a ponieważ zauważyli, że wiele programistów używa podobnych schematów w kodzie, to wzięli i opisali te podobne schematy jako wzorce. Dzięki temu można o tym książki pisać, można się tego uczyć, można o tym dyskutować.

jednak jakoś do tej pory nie mialem potrzeby ich używania.

Jakby się uprzeć to wszystko jest wzorcem. Używałeś klas? No to używałeś wzorca klasy (że jest to wzorzec, a nie jakaś magiczna nieodłączna część języka świadczy choćby fakt, że klasy można tworzyć nawet w językach które nie mają pojęcia klasa (np. w C albo w starym JavaScripcie).

Same metody w obiektówce to też pewnego rodzaju wzorzec (metoda to funkcja przypisana do konkretnego obiektu, czyli już jest to pewien wzorzec, bardziej zaawansowana organizacja kodu niż proste funkcje. Zwykle jest to robione na poziomie samego języka programowania, co nie znacza, że przestaje to być wzorcem). W zasadzie warto programować w różnych językach programowania, wtedy się widzi, ile rzeczy oczywistych to w rzeczywistości też pewien wzorzec.

Generalnie tak - warto poznawać wzorce, i eksperymentować z nimi, bo to może być źródło wiedzy/doświadczenia programistycznego. Jednak koniec końców warto zobaczyć na własnej skórze, które wzorce się sprawdzają w jakiej sytuacji i używać z rozsądkiem. Nie chodzi o to, żeby robić religię z jakichś konkretnych wzorców, także nie chodzi o to, żeby na siłę czegoś się uczyć (lepiej jest poznawać wzorce w praktyce niż siedzieć z podręcznikiem i wkuwać bez sensu. Podręczniki o wzorcach projektowych mają 2 wady:

  • zawierają rzeczy wyjęte z kontekstu, takie prawdy w proszku
  • zwykle takie podręczniki czytają osoby początkujące, które mają za mało doświadczenia, żeby znaleźć dla nich konkretne zastosowanie (ja jak czytałem o wzorcach kiedyś to niektóre wzorce były "ooo, znam to, sam tak robię, nie wiedziałem że to ma taką nazwę" ale inne z kolei to były raczej "WTF, po co to. Nie rozumiem").

jarekr000000
Z podręcznikami to dobra obserwacja. Kojarze też te WTF, chociaż obecnie jednak jest dużo w internecie źródeł i dyskusji, więc łatwiej sobie doczytać niż np. 20 lat temu.
EI
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 2 lata
0

Dzięki wszystkim za odpowiedzi, upewniliście mnie żę najwyższy czas poznać wzorce i ocenić samemu ich przydatność. Zaczne od tych wypisanych przez Shalom. Dzięki

forsberg
Może lepiej zacznij od tych, których(-ego) potrzebujesz ;) Najlepsza nauka to przez praktykę. A podstawa wzorców projektowych, to SoC + SOLID.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)