Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Design patterns - opracowanie
ziolo
post 4.02.2016, 16:30:00
Post #1





Grupa: Zarejestrowani
Postów: 82
Pomógł: 20
Dołączył: 17.01.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


http://mcreativo.pl/

Wzorce projektowe przykłady w Php, Java.
Wszystkie wzorce opisane(eng) z książki: "Design Patterns: Elements of Reusable Object-Oriented Software" (Wyjątek zamiana Singletona na DI)
Generalnie każdy wzorzec krok po kroku, podobne rozwiązanie jak tutorial z Angulara, wszystkie kody działają i można pobrać z: https://bitbucket.org/mcreativo/. Dla każdego kroku osobny branch: step1, step2 itd...

W przyszłości zamierzam jeszcze dodać komentarze(fb) do każdej strony bo wiadomo większy feedback lepsza jakość kodu.
Go to the top of the page
+Quote Post
nospor
post 4.02.2016, 16:43:52
Post #2





Grupa: Moderatorzy
Postów: 35 123
Pomógł: 5882
Dołączył: 27.12.2004




Jak juz piszesz po angielsku, to trzymaj sie tego do konca
Cytat
1) Co zrobiliśmy

Dla ClassA stworzyliśmy interfejs który ma implementować - addObserver oraz removeObserver
dodająca i podłączająca obiekty Observer

Obiekty Observer implementują jedną metodę - którą wywołuje obiekt Obserwowany

2) Jakie są zalety tego rozwiązania ?

Teraz możemy dynamicznie podłączać wiele obserwatorów, łatwo możemy dodawać nowego obserwatora, nie zmieniając obiektu obserwowanego


ps: czy dobrze zrozumialem ze poprostu wziales teksty z ksiazki i wstawiles je na strone?


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
ziolo
post 4.02.2016, 16:51:30
Post #3





Grupa: Zarejestrowani
Postów: 82
Pomógł: 20
Dołączył: 17.01.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 4.02.2016, 16:43:52 ) *
Jak juz piszesz po angielsku, to trzymaj sie tego do konca


ps: czy dobrze zrozumialem ze poprostu wziales teksty z ksiazki i wstawiles je na strone?


Ad 1) Nie, wszystkie przykłady i teksty sam wymyślałem. Książkę czytałem i wziąłem po prostu z niej listę wzorców.

Przykłady sa specjalnie abstrakcyjne i bardzo proste, żeby można było skoncentrować się na czym wzorzec polega i jak się zmienił kod.

Ad 2) Pierwsza wersja była pisana w 2014 w "PL" i tylko php. Teraz w styczniu przetłumaczyłem całość na en i napisałem przykłady w Javie 8.
Ad 3) Rozumiem, że ten tekst pl nie znalazłeś na stronie ?
Być może branch "master" który nie został updatowany.
Opublikowane na stronie są branche "stepX" i mam nadzieje, ze wszędzie już jest "en".

@Pyton_000, dzięki za sugestie z disqus(nie znałem), jak mi się będzie chciało i będę miał czas to dorobie jaśniejszą skórkę.

Ten post edytował ziolo 4.02.2016, 17:00:47
Go to the top of the page
+Quote Post
Pyton_000
post 4.02.2016, 16:52:16
Post #4





Grupa: Zarejestrowani
Postów: 7 864
Pomógł: 1381
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


tylko nie FB, wrzuć disqus, lepiej się sprawdza.

Co do strony super. Merytorycznie nieźle. Tylko może zrób wersję jasną i jakąś taką przystępniejszą.
Ta w prawdzie jest czytelna ale jakoś tak nie lubię ciemnych stron.

Tutaj liczy się merytoryka.
Go to the top of the page
+Quote Post
nospor
post 4.02.2016, 17:08:43
Post #5





Grupa: Moderatorzy
Postów: 35 123
Pomógł: 5882
Dołączył: 27.12.2004




Cytat
Rozumiem, że ten tekst pl nie znalazłeś na stronie ?

Na bitbucket. Troche to byl szok jak czytalem arta po en a potem w bitbucket kody po pl wink.gif


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Spawnm
post 5.02.2016, 23:11:32
Post #6





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




http://mcreativo.pl/design-patterns-php/spawnm/step1 smile.gif

Cytat
Warning: file_get_contents(/home/mcmarcin/www/mcreativo/app/..//code/design-patterns-php/spawnm/step1/_desc): failed to open stream: No such file or directory in /home/mcmarcin/www/mcreativo/src/Mcreativo/FrontBundle/Controller/CodeController.php on line 25
Go to the top of the page
+Quote Post
ziolo
post 6.02.2016, 20:10:28
Post #7





Grupa: Zarejestrowani
Postów: 82
Pomógł: 20
Dołączył: 17.01.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


thx Spawnm - w koncu to fixnalem

+ dodalem Mediatora: jakos mi umknął po drodze
Go to the top of the page
+Quote Post
lukaskolista
post 9.02.2016, 11:40:53
Post #8





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


Zajrzałem do wzorca strategia, bo akurat ostatnio go używałem i mam uwagę:
Strategia jest dynamiczna i zależna od kontekstu, a w Twoim przykładzie w php nie ma żadnego kontekstu, jest po prosty typowe proxy:
  1. class Context
  2. {
  3. /**
  4.   * @var StrategyA
  5.   */
  6. protected $strategyA;
  7.  
  8. /**
  9.   * @var StrategyB
  10.   */
  11. protected $strategyB;
  12.  
  13. /**
  14.   * @param StrategyA $strategyA
  15.   * @param StrategyB $strategyB
  16.   */
  17. function __construct(StrategyA $strategyA, StrategyB $strategyB)
  18. {
  19. $this->strategyA = $strategyA;
  20. $this->strategyB = $strategyB;
  21. }
  22.  
  23. public function doA()
  24. {
  25. $this->strategyA->doA();
  26. }
  27.  
  28. public function doB()
  29. {
  30. $this->strategyB->doB();
  31. }
  32. }


Moim zdaniem strategia wygląda mniej więcej tak:
  1. class Context implements BusinessContextInterface
  2. {
  3. /**
  4.   * @var StrategyA
  5.   */
  6. protected $strategyA;
  7.  
  8. /**
  9.   * @var StrategyB
  10.   */
  11. protected $strategyB;
  12.  
  13. /**
  14.   * @param StrategyA $strategyA
  15.   * @param StrategyB $strategyB
  16.   */
  17. function __construct(StrategyA $strategyA, StrategyB $strategyB)
  18. {
  19. $this->strategyA = $strategyA;
  20. $this->strategyB = $strategyB;
  21. }
  22.  
  23. public function do()
  24. {
  25. $rand = rand(0,1);
  26.  
  27. switch ($rand) {
  28. case 0:
  29. $this->strategyA->do();
  30. break;
  31.  
  32. case 1:
  33. $this->strategyB->do();
  34. break;
  35. }
  36. }
  37. }


W moim przykładzie obiekt kontekstu dynamiczne, adekwatnie do sytuacji dobiera konkretną strategię, a jego klient nie jest tego świadomy, wie jedynie, z jakiego interface'u skorzystać.
Go to the top of the page
+Quote Post
ziolo
post 9.02.2016, 13:47:33
Post #9





Grupa: Zarejestrowani
Postów: 82
Pomógł: 20
Dołączył: 17.01.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Hmm sprawdziłem pierwsze dwa przykłady z google i "Strategia" nie polega na tym, że implementacja zależy od wewnętrznych stanów Context.
Zależy tylko od strategii którą wstrzykujemy. To prosty wzorzec projektowy.

http://www.oodesign.com/strategy-pattern.html
http://www.tutorialspoint.com/design_patte...egy_pattern.htm

Twój przykład bardziej pasuje pod wzorzec "State" zresztą to sa bardzo podobne wzorce.


A co do tego:
Cytat(lukaskolista @ 9.02.2016, 11:40:53 ) *
klient nie jest tego świadomy, wie jedynie, z jakiego interface'u skorzystać.


W moim przykładzie klienta jest uproszczenie, że może wydawać się,  że w jednym miejscu tworzymy "Context" i używamy go od razu.
Ale tak naprawdę w realnym świecie to będą najprawdopodobniej różne miejsca. I wtedy faktycznie powinno się do docelowego klienta przesłać jedynie informacje o typie(interfejs) i ten docelowy klient nie będzie wiedział jakie strategie były wstrzyknięte.

  1. Context context = new Context(new StrategyA1(), new StrategyB2());
  2.  
  3. // to poniżej może być w zupełnie innym miejscu
  4. context.doA();
  5. context.doB();


Go to the top of the page
+Quote Post
lukaskolista
post 10.02.2016, 12:23:22
Post #10





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


W takim razie nie zrozumiałem uproszczenia, wygląda to dla mnie jak bardzo proste proxy. Mój przykład stanem na pewno nie jest, wzorce podobne, ale w stanie implementacją steruje właśnie klient obiektu, a w strategii kontekst.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.02.2020 - 03:29