Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.

5 Stron V   1 2 3 > »   
Reply to this topicStart new topic
> Wzorce projektowe, coto, poco, dlaczego
nospor
post 17.04.2007, 10:42:25
Post #1





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
Dołączył: 27.12.2004




Przez te święta człowiek rachube stracił i zapomniał o PRO.

No to może coś o wzorcach projektowych? Co to jest, na co to komu, jakie korzyści przyniesie stosowanie, jakie mamy wzorce (opis).


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

"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
splatch
post 21.04.2007, 21:22:57
Post #2





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Może troszkę pokrótce moje subiektywne zdanie i opinia.

Wzorce projektowe z jednej strony sposób na rozwiązanie często pojawiających się problemów programistycznych (to główna definicja), której nie chcę rozwijać.
Z drugiej strony to ujednolicona nomenklatura. O wiele łatwiej jest się porozumiewać mając jakieś standardy. Architekci mają rysunki techniczne - my diagramy UML, oni mówią na jego podstawie o architekturze domu - my z UMLa możemy dyskutować o architekturze aplikacji. Ciągnąc dalej ten przykład - architekci wymieniają się nazwami rodzajów konstrukcji dachu (np konstrukcja krokwiowa, jętkowa, płatwiowa etc). Programiści mówiąc o jakimś fragmencie aplikacji i kodu, mogą używać nazw wzorców (Proxy, Abstract Factory, Template Method, Builder, Visitor).

Rozsądne korzystanie z wzorców (czytaj tam gdzie jest taka potrzeba) daje nam spore korzyści w postaci przejrzystego, bardziej elastycznego kodu, ponieważ są to najlepsze, sprawdzone praktyki.

Co do wzorców - można wyróżnić kilka grup nadrzędnych:
Wzorce programistyczne.
Wzorce aplikacji biznesowych.
Wzorce aplikacji rozproszonych.

Każda z tych grup zawiera w sobie kolejne podgrupy. W grupie wzorców programistycznych wyróżniamy, zgodnie z podziałem GoF wzorce kreacyjne, wzorce strukturalne i wzorce czynnościowe.

Temat jest ciekawy i myślę, że warto go rozwinąć i zgłębiać na własną rękę.
Rekomendowana bibliografia:


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
Go to the top of the page
+Quote Post
Sedziwoj
post 21.04.2007, 21:30:04
Post #3





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Cytat(splatch @ 21.04.2007, 22:22:57 ) *
Rozsądne korzystanie z wzorców (czytaj tam gdzie jest taka potrzeba) daje nam spore korzyści w postaci przejrzystego, bardziej elastycznego kodu, ponieważ są to najlepsze, sprawdzone praktyki.


Ja bym się przyczepił do "ponieważ są to najlepsze", bo zacząłeś od "Rozsądne korzystanie z wzorców" więc są dobre ale nie zawsze się sprawdzają, więc nie możesz pisać że są najlepsze.

Ale z reszta raczej się zgadzam.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
splatch
post 21.04.2007, 22:00:54
Post #4





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Doszło do nadinterpretacji. Wzorce to bardzo dobre rozwiązania, ale nie można wpychać ich wszędzie gdzie sie da bo po prostu dojdzie do przesycenia. To tak jak z solą - w rozsądnych ilościach jest smaczna, a do tego:
Cytat
odgrywa niezbędną rolę w gospodarce wodnej ustroju i w utrzymaniu odpowiedniego ciśnienia krwi

Jednak jej nadmiar prowadzi do nadciśnienia, a z tym wiążą się poważne problemy.

Jeśli twierdzisz, że nie zawsze się sprawdzają pokaż przykład, gdzie ich zastosowanie niesie ze sobą problemy.


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
Go to the top of the page
+Quote Post
Sedziwoj
post 21.04.2007, 22:16:24
Post #5





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Wiesz wszędzie gdzie nie stosujesz wzorca tam sprawił by problemy.
Tylko czasem jest to oczywiste jak singleton, ale często nie są, bo zależności są dość płynne.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
Ociu
post 22.04.2007, 08:02:19
Post #6





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Rzut linkami:
Grupowe:Pojedyńcze
Chyba tyle wystarczy do dyskusji smile.gif
Go to the top of the page
+Quote Post
splatch
post 22.04.2007, 08:18:06
Post #7





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Pragnę nadminić, że niektórzy z biegiem czasu zaczęli uważać Singleton jako antywzorzec, czyli mówiąc najprościej brudną protezę, która stała się powszechna i zyskała nazwę.

Moim zdaniem należy zachować wstrzęmięźliwość w jego stosowaniu, znaczy unikać jak ognia, a gdy stosować to już ze 100% pewnością.


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
Go to the top of the page
+Quote Post
Ociu
post 22.04.2007, 18:35:02
Post #8





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Cytat(splatch @ 22.04.2007, 09:18:06 ) *
Pragnę nadminić, że niektórzy z biegiem czasu zaczęli uważać Singleton jako antywzorzec, czyli mówiąc najprościej brudną protezę, która stała się powszechna i zyskała nazwę.

Tu niestety muszę się zgodzić.
Od pewnego czasu klasa programistów musiała mieć statyczną metodę getInstance (i podobne).
Warto pamiętać, że niektóre obiekty (klasy) wcale nie potrzebują wzorca singleton. Rozwaga, jedna z wielu cech, jaką trzeba posiadać aby napisać dobry system.
pozdrawiam, Wojtek.
Go to the top of the page
+Quote Post
KOMPsognat
post 26.06.2007, 19:07:57
Post #9





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 23.10.2006

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


Chciałbym jeszcze poruszyć temat podziału wzorców.
Jak wiadomo od opublikowania katalogu wzorców Bandy Czworga trochę czasu upłynęło i sporo wzorców przybyło.

Myślę, że bardzo pomocne byłoby utworzenie w tym temacie listy wzorców wraz z ich podziałem. Zapewne pomoże to zarówno osobom, które wiedzą o wzorcach sporo, jak i początkującym projektantom.

Poniżej przedstawiam moją aktualną wiedzę na temat listy wzorców i ich podziału:

WZORCE PROGRAMISTYCZNE
Wzoce kreacyjne
Builder
Factory Method
Prototype
Singleton (! czasem uznawany za antywzorzec)
Abstract Factory

Wzorce strukturalne
Adapter
Decorator
Facade
Composite
Bridge
Proxy
Flyweight

Wzorce czynnościowe
Chain of responsibility
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template Method
Visitor


WZORCE APLIKACJI BIZNESOWYCH
Wzorce warstwy prezentacji
Intercepting Filter
Front Controller
Context Object
Application Controller
View Helper
Composite View
Service to Worker
Dispatcher View
Page Controller
Template View

Wzorce warstwy biznesowej

Business Delegate
Service Locator
Session Façade
Application Service
Business Object
Composite Entity
Transfer Object
Transfer Object Assembler
Value List Handler


Wzorce warstwy integracji

Data Access Object
Service Activator
Domain Store
Web Service Broker


Jeśli jest gdzieś błąd - poprawcie.
Jeżeli czegoś brakuje (jest tak na 100%; chociażby nie ma wzorców aplikacji rozproszonych) - dopiszcie.
Go to the top of the page
+Quote Post
splatch
post 4.07.2007, 14:47:33
Post #10





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Świetny spis, którego próżno szukać po "książkowych" katalogach. Jego rozbudowanie o przykłady i opisy w języku polskim zaowocowało by świetnym materiałem do publikacji. Ze swojej strony proponuję dodanie jako podzbioru wzorców aplikacji biznesowych, wzorców dla warstwy mapowań O/R.


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
Go to the top of the page
+Quote Post
KOMPsognat
post 29.07.2007, 13:05:44
Post #11





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 23.10.2006

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


splatch: przyznam szczerze, że spis mi jest potrzebny do stworzenia strony o wzorcach projektowych. Jednak nie ma sensu pisać o samych wzorcach Bandy Czworga, dlatego najpierw chcę się jeszcze dokształcić w tej materii.

Czy mógłbyś napisać coś więcej o wzorcach warstwy mapowań?

Gdzie przydzielilibyście poniższe wzorce:
- Registry
- Tranaction Script
- Domain Model
- Data Mapper
- Identity Map
- Unit of Work
- Intercepting Filter
- Property

//----------
EDIT:
//----------

Przedstawiam poniżej uaktualnioną listę wzorców projektowych jakie udało mi się znaleźć w sieci:
WZORCE PROGRAMISTYCZNE
Wzoce kreacyjne
- Builder
- Factory Method
- Prototype
- Singleton (! czasem uznawany za antywzorzec)
- Abstract Factory

Wzorce strukturalne
- Adapter
- Decorator
- Facade
- Composite
- Bridge
- Proxy
- Flyweight

Wzorce czynnościowe
- Chain of responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Visitor

WZORCE KORPORACYJNE
Wzorce podstawowe
- Gateway
- Mapper
- Layer Supertype
- Separated Interface
- Registry
- Value Object
- Money
- Special Case
- Plugin
- Service Stub
- Record set

Wzorce logiki dziedziny
- Transaction Script
- Domain Model
- Table Module
- Service Layer

Wzorce architektury źródła danych
- Table Data Gateway
- Row Data Gateway
- Active Record
- Data Mapper

Wzorce zachowań dla mapowania obiektowo-relacyjnego
- Unit of Work
- Identity Map
- Lazy Load

Wzorce struktury dla mapowania obiektowo-relacyjnego
- Identity Field
- Foreign Key Mapping
- Association Table Mapping
- Dependent Mapping
- Embedded Value
- Serialized LOB
- Single Table Inheritance
- Class Table Inheritance
- Concrete Table Inheritance
- Inheritance Mappers

Wzorce prezentacji internetowych
- Model View Controller
- Intercepting Filter
- Page Controller
- Front Controller
- Context Object
- Template View
- Transform View
- Two Step View
- Application Controller
- View Helper
- Composite View
- Service to Worker
- Dispatcher View

Wzorce warstwy biznesowej
- Business Delegate
- Service Locator
- Session Façade
- Application Service
- Business Object
- Composite Entity
- Transfer Object
- Transfer Object Assembler
- Value List Handler

Wzorce warstwy integracji
- Data Access Object
- Service Activator
- Domain Store
- Web Service Broker

Wzorce dystrybucji
- Remote Facade
- Data Transfer Object

Wzorce współbieżności autonomicznej
- Optimistic Offline Lock
- Pessimistic Offline Lock
- Coarse-Grained Lock
- Implicit Lock

Wzorce stanu sesji
- Server Session State
- Database Session State

Mam nadzieję, że przedstawiona powyżej lista będzie pomocna w nauce wzorców. Ponieważ wzorce projektowe w programowaniu wywodzą się z języka Java to może się zdażyć, że implemntacja któregoś z powyższych wzorców będzie niemożliwa w PHP, lub zatraci pierwotny sens.

Na zakończenie pragnę również dodać, że w niedalekiej przyszłości ma powstać encyklopedia wzorców (jak i anty-wzorców) projektowych w PHP oparta o mechanizm Wiki. Mam nadzieję, że zaawansowani programiści społeczności php.pl pomoże w pracach nad tym ambitnym projektem.

Ten post edytował KOMPsognat 8.09.2007, 18:05:47
Go to the top of the page
+Quote Post
Jim
post 14.02.2008, 12:05:12
Post #12





Grupa: Zarejestrowani
Postów: 111
Pomógł: 0
Dołączył: 27.07.2005

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


kopalnia: http://sourcemaking.com/

Cytat(KOMPsognat @ 29.07.2007, 13:05:44 ) *
Na zakończenie pragnę również dodać, że w niedalekiej przyszłości ma powstać encyklopedia wzorców

coś już powstało? bo od tego postu minęło już sporo czasu winksmiley.jpg
Go to the top of the page
+Quote Post
KOMPsognat
post 24.02.2008, 11:57:38
Post #13





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 23.10.2006

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


Projekt umarł śmiercią naturalną - brak chętnych do współpracy.
Go to the top of the page
+Quote Post
markac
post 8.11.2008, 23:25:05
Post #14





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 23.02.2005

Ostrzeżenie: (10%)
X----


To ja tak może z innej beczki. Wszyscy tu chyba są zgodni, że wzorce projektowe są potrzebne i przydatne, ale czy na pewno wszędzie i dla każdego?
Niepokojący i zarazem śmieszny jest fakt jest, że większość początkujących programistów, uważających się za (o ironio) profesjonalistów, a może i Ci bardziej doświadczeni również popadają w tak duży zachwyt, że z chęcią prosty program Hello World napisaliby używając architektury Model 2.
Czytałem wiele postów, zupełnie przypadkowo, gdzie głównym problemem programistów nie jest znalezienie optymalnego i przede wszystkim działającego algorytmu, a wykorzystanie na siłę istniejącego wzorca projektowego, czyli zaimplementowanie go do swojego programu, mimo, że bez niego mogliby już dawno skończyć swoją aplikację w czasie min. 10-krotnie szybszym. Nie mówmy teraz o możliwości rozbudowy i ponownego użycia klas, bo wiemy jak to z tym jest. Szczytem jest studiowanie stron Core J2EE Patterns i kopiowanie wszystkiego z JSP, albo ASP .NET MVC do PHP. Może czas wybrać jedna z tych technologii?
Faktem jest, ze możemy dużo się nauczyć kopiując... ale może warto wymyślić coś swojego, zamiast odkrywać kolo na nowo?

Użyj możliwie najprostszego działającego algorytmu - Czy ktoś z was jeszcze pamięta o tej doktrynie?

Wielu wciąż pyta, czy to co napisali, jest zgodne z danym wzorcem i czy to się nazywa MVC (bardzo popularne ostatnio słowo). Żeby był jeden i jedyny prawidłowy sposób implementacji tego wzorca, to chyba to nie nazywałby się wzorzec? Wzorzec jest uniwersalny. Możemy go dostosować do rożnych problemów i wiadomym jest, że każda jego implementacja będzie inna. Nie dostosowujemy kodu do wzorca, chyba, że jest ku temu duży powód!
Go to the top of the page
+Quote Post
ayeo
post 9.11.2008, 12:59:04
Post #15





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


@markac, masz sporo racji. Jednak rozgraniczyłbym pojęcia algorytm i system. Jeżeli piszesz algorytm, powiedzmy, sortujący to wzorce zbytnio Ci się nie przydadzą. Natomiast jeżeli chodzi o jakiś złożony system wtedy sytuacja zmienia się diametralnie. Można poświęcić odrobinkę wydajności dla zwiększenia czytelności kodu. Wzorce opisują zależności pomiędzy obiektami lub właściwości samych obiektów. Natomiast algorytmy (wykonujące już te konkretne działania) są "pozamykane" w samych klasach i oczywiście powinny być i wydajne i proste.

Pozdrawiam!


--------------------
Go to the top of the page
+Quote Post
qbatoja
post 20.11.2008, 00:27:45
Post #16





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 3.05.2005

Ostrzeżenie: (10%)
X----


osobiscie uwazam nieodpowiednim nazywanie singletonu antywzrocem. kazdy wzorzec uzywany niezgodnie z nominalnym zastosowaniem jest czyms co destruktywnie wplywa na architekture aplikacji. tak samo singleton jak i np fasada. a signleton... poprostu pilnuje jednej instancji.

@markac - best post ever! sam kiedys w taka pulapke wpadlem smile.gif

co do encyklopedii jestem chetny do wspolpracy ;p

Ten post edytował qbatoja 20.11.2008, 00:30:48
Go to the top of the page
+Quote Post
tomek_swat
post 3.12.2008, 23:44:48
Post #17





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 3.04.2008

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


proszę o wyjaśnienie pewnej kwestii spoktałem się z opinią, że singleton nie powinien być wykożystywany do np. pobierania danych konfiguracyjnych, dzisiaj na jednej ze stron przeczytałem:
Kod
<h4>W bardziej rozbudowanych programach za pomocą singletonu można zapisywać i odczytywać konfigurację programu</h4>


obecnie mam zrobione w swojej aplikacji, tak, że mam klasę Config.php typu singleton, która parsuje plik .ini i poprzez metodę getProperty pobiera wartość dla danego wywołania
  1. <?php
  2. $login = Config::getInstance()->getProperty("login");
  3. ?>

dzięki temu mam w programie w zmiennej $login wartość odpowiadającą login = "ktos" w pliku .ini
czy to jest prawidłowe wykorzystanie wzorca Singleton?
pzdr
Go to the top of the page
+Quote Post
markac
post 4.12.2008, 09:15:17
Post #18





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 23.02.2005

Ostrzeżenie: (10%)
X----


Cytat(tomek_swat @ 3.12.2008, 23:44:48 ) *
obecnie mam zrobione w swojej aplikacji, tak, że mam klasę Config.php typu singleton, która parsuje plik .ini i poprzez metodę getProperty pobiera wartość dla danego wywołania
  1. <?php
  2. $login = Config::getInstance()->getProperty("login");
  3. ?>

dzięki temu mam w programie w zmiennej $login wartość odpowiadającą login = "ktos" w pliku .ini
czy to jest prawidłowe wykorzystanie wzorca Singleton?
pzdr


Inaczej się nie da smile.gif Ja preferuję krótsze wywołanie:
  1. <?php
  2.  $login = Config::getProperty("login");
  3. ?>


Implementacja metody:
  1. <?php
  2.   public static function getProperty($name) {
  3.     return self::getInstance()->get($name);
  4.   }
  5. ?>


Ten post edytował markac 4.12.2008, 09:15:57
Go to the top of the page
+Quote Post
tomek_swat
post 4.12.2008, 16:01:58
Post #19





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 3.04.2008

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


ok dzięki, czyli rozumiem, że mogę spokojnie stosować singleton do pobierania danych konfiguracyjnych oraz do łączenia się z bazą danych poprzez napisanie sobie klasy opartej o pdo działającej jako singleton? czy możecie podać jeszcze jakieś zgodne z doktryną zastosowania singletonu?
pzdr
Go to the top of the page
+Quote Post
Kocurro
post 5.12.2008, 15:13:39
Post #20





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


W PHP singleton łatwo się uzyskuje tworząc klasę stricte statyczną winksmiley.jpg
Go to the top of the page
+Quote Post

5 Stron V   1 2 3 > » 
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: 19.03.2024 - 05:25