Wzorce projektowe czy warto

pol90
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 3 lata
  • Postów:1181
0

Powiedzmy jak się robi aplikacje na 3000 linijek kodu (PHP) to czy warto się zajmować wzorcami projektowymi czyli układem klas funkcji, No bo w zasadzie nie mogę znależć nigdzie w sieci programu do robienia wzorców projektowych, a nie będę go robił na kartce.

kzkzg
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 19 godzin
  • Postów:925
2

Program do robienia wzorców? :)
Wciskanie na siłę wzorów projektowych jest błędem.


Keep calm and blame frontend.
Tell your cat I said pspsps.
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:2 minuty
2
pol90 napisał(a):

w zasadzie nie mogę znależć nigdzie w sieci programu do robienia wzorców projektowych, a nie będę go robił na kartce.

Co ty chcesz robić na kartce?
Może chcesz rysować schematy UML-a? Od tego jest dużo narzędzi, np: http://www.umldesigner.org/

Wzorce projektowe to standardowe metody projektowania/kodowania algorytmów.
masz przykładowo takie wzorce (te co mi od razu do głowy przychodzą):

  • budowniczy
  • fabryka
  • wizytator
  • adapter
  • fasada
  • obserwator
  • strategia
  • kompozyt
  • .....

Wiele z tych wzorców ludzie stosują nieświadomie.

Celowo nie wymieniłem singletona, bo to powinno być traktowane jako antywzorzec (każdy newbie się na niego rzuca, bo najprostszy ze wszystkich wzorców, a jest najmniej użyteczny, a wręcz najbardziej szkodliwy).


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 3x, ostatnio: MarekR22
pol90
O właśnie mi o UML chodziło coś nie mogę rożróżnić tego od wzorców projektowych.
S6
slawekh666
A tak z ciekawości, korzystacie teraz z umla, czy jak to było chyba jakie 7 lat temu nie ma na to czasu?
pol90
@slawekh666 Ja na studiach musiałem korzystać.
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:2 dni
  • Lokalizacja:Warszawa
  • Postów:2251
4

Nie licz programu na linie kodu. Mierz go jakością.

cerrato
Dokładnie. Czasami da się skomplikowaną aplikację typu CAD albo SAP napisać w dosłownie kilkunastu liniach :P
LP
  • Rejestracja:około 7 lat
  • Ostatnio:około 2 miesiące
  • Postów:365
3

https://exceptionnotfound.net/tag/design-patterns/ - dobry blog, jeszcze lepiej opisane wzorce projektowe oraz https://exceptionnotfound.net/tag/anti-patterns/ . Warto przeczytać przy kawie.

LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:około 4 godziny
  • Postów:8409
6

O właśnie mi o UML chodziło coś nie mogę rożróżnić tego od wzorców projektowych.

No to nie rozumiesz idei wzorców projektowych i lepiej się zatrzymaj i spróbuj zrozumieć, co to w ogóle jest.

Wzorce projektowe to sposób, w jaki można połączyć ze sobą poszczególne części kodu ze sobą. One są niewidoczne i przenikają kod. Wzorzec projektowy to jak zwyczaj, np. zwyczaj jedzenia pierogów w Wigilię. Tak samo zwyczajem może być specyficzny sposób tworzenia obiektów, żeby w odpowiedni sposób współpracowały ze sobą.

A UML to sposób zapisu graficznego, sposób rysowania diagramów. Czyli UML to będzie rysunek pieroga.

Powiedzmy jak się robi aplikacje na 3000 linijek kodu (PHP) to czy warto się zajmować wzorcami projektowymi czyli układem klas funkcji,

To nie ma nic do rzeczy. 3000 linijek kodu to nie jest to już raczej Hello World, więc już jest tu pewna złożoność, zapewne ileś modułów, czyli pełno okazji do zaimplementowania wzorca (a jeden "wzorzec projektowy" można zaimplementować nawet w kilku/nastu linijkach kodu, więc w 3000 linijkach to by się zmieściły pewnie z setki wzorców).

Tylko nie o to chodzi wcale. Wzorce projektowe mają do czegoś służyć, rozwiązywać jakieś konkretne problemy, a nie być wrzucane na siłę, bo można. Myśl o problemach, które musisz rozwiązać i czy dany wzorzec rozwiązuje problem, a nie o tym, czy warto się zajmować wzorcami projektowymi, bo to pytanie jest totalnie od czapy.


edytowany 3x, ostatnio: LukeJL
LP
Oczywiście tylko żeby stwierdzic: o tutaj mógłbym użyć strategii a tutaj fasady to trzeba wzorce przynajmniej kojarzyć.
LukeJL
Niekoniecznie kojarzyć, tylko umieć stosować umiejętnie, i nie stosować, kiedy nie trzeba. Używanie fasady bez opamiętania kończy się robieniem wrapperów do wszystkiego i overengineeringiem. Ew. tworzeniem frameworków, które pozwalają w teorii napisać coś za pomocą kilku linijek kodu, a w rzeczywistości są wyciekającą abstrakcją i żeby napisać coś zaawansowanego w nich i tak trzeba będzie sięgnąć pod maskę. Każdy wzorzec niewłaściwie wykorzystany staje się szkodliwy.
LukeJL
Wzorce projektowe to trochę jak nóż, niektórzy nim kroją chleb, a niektórzy w ogóle lepiej, żeby go nie dotykali.
LP
Zgadzam się z tym co napisałeś w wiadomości: "Wzorce projektowe mają do czegoś służyć, rozwiązywać jakieś konkretne problemy, a nie być wrzucane na siłę, bo można". Popieram w 100%. Mój komentarz odnosił się do części: "Myśl o problemach, które musisz rozwiązać i czy dany wzorzec rozwiązuje problem". Mógłbyś napisać jak chciałbyś odpowiedzieć na to pytanie bez podstawowej / pobieżnej znajomości wzorców. Moją myśl napisał bardziej rzeczowo cerrato w poście niżej. Gdy ja pisałem odpowiedź do Ciebie to jeszcze nie przeczytałem jego wiadomości.
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:2 dni
  • Lokalizacja:Warszawa
  • Postów:2251
1

Najlepiej to kup książkę o tym.

cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 14 godzin
  • Lokalizacja:Poznań
  • Postów:8769
4

Moim zdaniem musisz mieć w głowie dwie rzeczy odnośnie wzorców (chociaż w sumie to ta uwaga dotyczy też wielu innych rzeczy z programowaniem związanych)
1) Powinieneś wzorce w miarę kojarzyć. Nie mówię, żebyś miał na pamięć wykute wszystkie szczegóły dotyczące każdego wzorca, bo to sobie znajdziesz w razie potrzeby. Ale musisz je na tyle kojarzyć, żeby umieć załapać, w jakiej sytuacji dany wzorzec może być przydatny. Nie znając ich wcale, nawet nie będziesz wiedział, czego masz szukać
2) Jak napisałem powyżej - wzorce bywają przydatne w różnych sytuacjach, więc niekoniecznie w każdym projekcie da się z nich skorzystać. To trochę jak z programowaniem obiektowym albo z rekurencją - są fajne, ale nie wszędzie pasują. I tak, jak na siłę nie ma co pchać wszędzie OOP, tak jak są tematy, które się lepiej i bardziej naturalnie rozwiąże bez rekurencji, tak samo nie zawsze do danego projektu da się wprowadzić w sensowny sposób dany wzorzec/wzorce. Oczywiście - na upartego można, ale nie będzie to miało sensu, nie zwiększy także czytelności czy możliwości rozbudowy kodu.

Jakby nie patrzeć, pkt. 2 wynika z pierwszego. Żeby móc ocenić, czy w danej sytuacji da się wykorzystać jakiś wzorzec (a także wybrać odpowiedni), najpierw powinieneś się z nimi zapoznać i w miarę je kojarzyć.


Zobacz pozostałe 11 komentarzy
LukeJL
@m123 Przede wszystkim duże obycie z kodem. Ludzie dzisiaj za wcześnie się uczą wzorców, zamiast dać sobie czas na pisanie projektów i chłonięcie powoli wiedzy. Ktoś kto dużo się napisał kodu, ale nie zna w ogóle wzorców i wejdzie do projektu, gdzie będą używane wzorce X, Y i Z - po prostu poczyta coś już w pracy o wzorcach i potem będzie już rozumiał (może nawet się okazać, że sam je nieświadomie stosował). A ktoś kto się wyuczył wzorców na pamięć, ale nie ma dużego "przebiegu", nie napisał wielu projektów w swoim życiu, zwykle tych wzorców po prostu i tak nie zrozumie
LukeJL
Czyli: praktyka > teoria.
M1
na razie świadomie uzywalem jedynie budowniczego. no ale wszystko przyjdzie z czasem
MarekR22
pamiętaj, jeszcze, że w niektórych językach są specyficzne wzorce (np w C++ jest RAII - resource acquisition is initialization), nie znam PHP, ale też może coś takiego mieć.
LukeJL
W PHP to pewnie spaghetti code jest najpopularniejszym wzorcem xD
czysteskarpety
czysteskarpety
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Piwnica
  • Postów:7697
1

Do PHP masz PSR, ponadto robiąc w miarę uważnie w frameworkach zwykle poznajesz też i wzorce, chyba, że robisz na odpierdziel to nie.


DE
  • Rejestracja:ponad 9 lat
  • Ostatnio:10 miesięcy
  • Postów:1788
3

@pol90: ja już Ci kiedyś pisałem, czym się powinieneś zainteresować.

Przeczytaj tą książkę:
https://helion.pl/ksiazki/refaktoryzacja-ulepszanie-struktury-istniejacego-kodu-martin-fowler-kent-beck-john-brant-william-opdy,refukv.htm

I posprzątaj jeden ze swoich projektów. Wzorce projektowe Ci nie pomogą na razie. Wzorce wymienione przez @MarekR22, to wzorce używane przy skomplikowanych regułach biznesowych, a Ty takich nie masz. Może z wyjątkiem fabryki i strategii. Te dwa wzorce możesz ogarnąć, bo się często przydają.

Musisz nauczyć się lepiej nazywać zmienne, tworzyć mniejsze klocki, tworzyć mniej skomplikowany kod. Poczytaj na temat SOLID. A zwłaszcza na temat SRP (S z solid) i OCP (O z solid). Dodając do swojego kodu wzorce projektowe na siłę spowodujesz, że będzie jeszcze mniej czytelny. Skup się na single responsibility principle i podstawowych rzeczach, takich jak nazewnictwo zmiennych.

edytowany 2x, ostatnio: Desu
pol90
No tym się właśnie już zajmuje, a pytałem tylko o te wzorce ze względu na dostanie pracy.
DE
Bardziej Ci pomoże to, co wyżej napisałem, niż nauczenie się jakiegoś abstract factory, bo pewnie większości tych wzorców nie zrozumiesz dopóki nie będziesz musiał ich zastosować w pracy, a jak będziesz miał ładny i schludny kodzik zgodny z SRP i dobrym nazewnictwem, to zrobisz lepsze wrażenie, niż cytując z książki co robi kompozyt.
pol90
No ja właśnie teraz mówię, że tym się teraz zajmuje co mi zasugerowałeś wyżej.
DE
No i super, trzymam kciuki :)
DE
Możesz wrzucić do oceny kod po takim zabiegu. Najlepiej wrzuć go na githuba, a czyszczenie przeprowadź na osobnym branchu, to bedzie łatwiej zobaczyć, co poprawiłes.
AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:8 dni
  • Postów:3561
1

wzorce nie są jakąś religią która obowiązuje do wykonania (choś ta religia na wyznawców, i to bardzo szkodliwe)

Podoba mi sie określenie @LukeL "jak pierogi w wigilię"
Inne: jak stolarz do stolarza mówi: to trzeba złączyć na pióro. Sprawna i krótka komunikacja między fachowcami z branży


Bo C to najlepszy język, każdy uczeń ci to powie
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)