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.

> Wzorce projektowe, coto, poco, dlaczego
nospor
post
Post #1





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
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).
Go to the top of the page
+Quote Post
5 Stron V   1 2 3 > »   
Start new topic
Odpowiedzi (1 - 81)
splatch
post
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:
Go to the top of the page
+Quote Post
Sedziwoj
post
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.
Go to the top of the page
+Quote Post
splatch
post
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.
Go to the top of the page
+Quote Post
Sedziwoj
post
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.
Go to the top of the page
+Quote Post
Ociu
post
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
splatch
post
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ą.
Go to the top of the page
+Quote Post
Ociu
post
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
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
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.
Go to the top of the page
+Quote Post
KOMPsognat
post
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
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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
KOMPsognat
post
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
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
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
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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
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ą (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #21





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




@Kocurro - nie żebym się czepiał, ale Singleton to Singleton, a nie klasa statyczna (IMG:http://forum.php.pl/style_emoticons/default/happy.gif)
Go to the top of the page
+Quote Post
Kocurro
post
Post #22





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

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


Cysiaczek - singleton to wzorzec projektowy ... prawda (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

A klasa statyczna może stanowić implementację tego wzorca w PHP ...

Wzorzec to nie implementacja ... właśnie dlatego wzorce są takie cool i trendy bo nie mają ściśle ustalonej implementacji - są w pewnym sensie czarnym pudełkiem, które ma robić coś co jest określone a nie jest określone dokładnie jak ma to robić. I Ty jako programista masz tak wymyślić co w tym czarnym pudełku jest by ono było jak najlepszym czarnym pudełkiem ...

i jeśli wolisz:

  1. <?php
  2.  
  3. $Config->getInstance()->load( 'config.ini' );
  4.  
  5. $Config->getInstance()->getValue( 'zmienna' );
  6. ?>


to proszę bardzo - ja wolę jednak czasem mieć mniej znaczków bo nie zawsze ich duża ilość jest dobra.

Pozdr.
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #23





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Klasa statyczna nie jest implementacją Singletona i nigdy nie będzie. Istotą tego wzorca nie jest dostęp do danych, tylko istnienie jedynej instancji danego obiektu w systemie.

Pozdrawiam
Go to the top of the page
+Quote Post
chlebik
post
Post #24





Grupa: Zarejestrowani
Postów: 113
Pomógł: 5
Dołączył: 12.09.2006
Skąd: Pruszków/Warszawa

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


Cysiaczek dobrze mowi. Dla informacji - ostatnie spotkanie Warszawa Design Patterns Group było poświęcone singletonowi:

Materiały z tego spotkania
Go to the top of the page
+Quote Post
nasty
post
Post #25





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


Osobiście, bardzo nie lubie wzorca Singleton i uważam go za anty wzorzec. W swoich projektach staram sie omijać jego użycie szerokim łukiem, zastępując go wieloma bardziej nadającymi sie wzorcami/pomysłami, takimi jak Chain-of-responsibility lub/i przekazywaniem objektu kontekstowego dalej. Jestem prawie pewny, że w każdej aplikacji można wyeliminować wszystkie użycia Singletona bez uszczerbku na czytelności kodu bądź jasności architektury a wręcz przeciwnie - projekt staję się bliższy naturalnemu myśleniu i łatwiejszy w debugowaniu.

Ten post edytował nasty 27.12.2008, 07:34:09
Go to the top of the page
+Quote Post
qbatoja
post
Post #26





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

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


w domu mam jeden piec do ogrzewania. zeby uzyskac cieplo w moim pokoju, nie potrzebuje zamawiac drugiego, tylko "odczytam" gaz z tego jednego.
ja tak rozumiem singleton ;]
Go to the top of the page
+Quote Post
nasty
post
Post #27





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


... albo przekaze gaz z jednego (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
starach
post
Post #28





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


  1. <?php
  2. class DRA_Engine
  3. {
  4.    private static $cfg;
  5.    private static $loader;
  6.    private static $output;
  7.    private static $router;
  8.    private static $template;
  9.    private static $website;    
  10.  
  11.    public function __construct();
  12.    public function init();
  13.    public function finalize();
  14.    
  15.    public static function config();
  16.    public static function loader();
  17.    public static function output();
  18.    public static function router();
  19.    public static function template();
  20.    public static function website();
  21. }
  22. ?>
Tak wygląda klasa główna mojego FW. ( Pominąłem implementacje metod i komentarze )
Teraz pytanie. Registry i singleton zło mówicie. Dlaczego? W konstruktorze mam przypisanie do pól składowych obiektów które pobieram przez getInstance(). Po prostu każda z tych 6 klas implementuje Singleton. Nie bardzo wiem co tutaj jest złe.
Go to the top of the page
+Quote Post
markac
post
Post #29





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

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


Wszystko (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif)
Go to the top of the page
+Quote Post
starach
post
Post #30





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


To żeś mnie nawrócił na Context (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Miałem jakoś tutaj uzasadnić użycie lub nieużywanie Contextu ale jakoś nic mi do głowy nie przychodzi.
Koronnym argumentem przeciwko takiemu sposobowi używania klas jest Hermetyzacja. Chyba wszyscy jesteśmy zgodni że tak na prawdę można ją złamać na dziesiątki sposobów i pakowanie wszystkie w obiekty kontekstu tak na prawdę guzik da. Więc na dobrą sprawę wszystko sprowadza się do wygody użytkowania. Czy w waszych kontekstach macie oddzielne metody do pobierania ściśle określonych obiektów? W przykładach widzę tylko metody get i set które mogę śmiało porównać do ubogiej wersji wzorca Registry, z tą różnicą że nie jest on statyczny tylko przekazywany ręcznie do konkretnych obiektów.

Projektując swój silnik doszedłem do wniosku że nie ma potrzeby tworzyć kilku instancji takich samych obiektów gdyż może to powodować nietypowe zachowanie całej aplikacji o zwykłym spadku wydajności nie wspominając. Wystarczy mi jeden obiekt Template tylko udoskonalony o obsługę sesji. Output też jeden powinien być. Bo co mi z danych umieszczonych w klasie które nie zostaną przetworzone.
Według mnie w takiej sytuacji Singleton jest jak najbardziej na miejscu. Konstruktor na private i mam tylko jedną instancję danej klasy w całym systemie. Nie muszę trząść portkami że będę kilka godzin debugował całą aplikację bo utworzę kilka obiektów, klasy która powinna mieć jeden obiekt.
Go to the top of the page
+Quote Post
wrzasq
post
Post #31





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

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


W twoim przypadku singletony są bez sensu i na pewno burzą kod. Skoro masz taką klasę... hmm.. rejestru? kontekstu? (co w kontekście robią metody statyczne, albo w rejestrze dynamiczne?) to nie potrzebujesz singletonów w poszczególnych klasach. Instancje zasobów tworzysz w czasie inicjalizacji silnika, więc po co im singletony? Tworzysz je przez new i przechowujesz, w systemie pobierasz z tego obiektu. Więc singleton mija się z celem. Albo korzystaj z 6 singletonów wszędzie, albo twórz sobie te zasoby w twojej klasie. Chyba raczej proste - skoro masz singleton to po cholerę pobierać go przez rejestr/kontekst - jak już tak mówisz o "zwykłej wydajności" to to jest dokładnie niepotrzebny narzut.
Go to the top of the page
+Quote Post
starach
post
Post #32





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Rejestr dla wygody, natomiast Singleton jako uniemożliwienie utworzenia więcej niż jednej instancji danej klasy. Każda singletonowa klasa ma konstruktor ustawiony na prywatny, więc w przypływie nagłej weny twórczej nie zrobię dwóch instancji DRA_Output. Co mogłoby mieć zgubne skutki.

init() i finalize() używam w index.php. Jako że nie są to gettery chciałem je jakoś odróżnić, więc nie robiłem z nich metod statycznych.
W indeksie jest tworzony obiekt DRA_Engine. Konstruktor przypisuje obiekty do pól składowych init() uruchamia ładowanie i parsowanie konfiguracji a finalize() składa wszystkie elementy do kupy i wypluwa użytkownikowi.

Ten post edytował orglee 8.01.2009, 05:19:24
Go to the top of the page
+Quote Post
LBO
post
Post #33





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Prawda jest taka, że przy kontekście w ogóle nie potrzeba oprogramowanych Singletonów tylko tworzysz je na żądanie

Podam na przykładzie fabryki modelu (przemaksymalnie uproszczony, bez niuansów):

  1. <?php
  2. public function getModel($name, $module, array $parameters)
  3. {
  4.    // ustalamy nazwę klasy i zapisujemy do $class
  5.  
  6.    if(!class_exists($class)) {
  7.        throw new Exception('Model does not exist.');
  8.    }
  9.  
  10.    $rc = new ReflectionClass($class);
  11.    if($rc->implementsInterface('ISingletonModel')) { // może też być jakiś uniwersalny interfejs Singleton
  12.        // tutaj pobiera istniejący już obiekt z tablicy instancji lub jeżeli go nie ma tworzy nowy i zapisuje do tej tablicy.
  13.    } else {
  14.        // tworzy nowy obiekt dla modelu i inicjujemy.
  15.    }
  16.    return $modelInstance;
  17. }
  18. ?>
Go to the top of the page
+Quote Post
starach
post
Post #34





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Jak mniemam w komentarzu metody po @return jest podana nazwa klasy abstrakcyjnej po której dziedziczą modele lub ewentualnie interfejs. No i tutaj już widać różnice w sposobie stosowanych przez nas rozwiązań. Też konstruuję takie metody które nazywam akcesorami / geterami ale nie przyrównuję ich do kontekstu. Druga sprawa to sprawdzanie implementowanych interfejsów.
  1. <?php
  2. $rc = new ReflectionClass($class);
  3.   if($rc->implementsInterface('ISingletonModel')) { // może też być jakiś uniwersalny interfejs Singleton
  4.       // tutaj pobiera istniejący już obiekt z tablicy instancji lub jeżeli go nie ma tworzy nowy i zapisuje do tej tablicy.
  5.   }
  6. ?>


  1. <?php
  2. if(DRA_Class::doesImplements(obiekt lub nazwa klasy, 'nazwa interfejsu'))
  3. {
  4.  
  5. }
  6. ?>
Możesz mówić że wynajduję koło od nowa pisząc własną implementację, ale dla mnie ten zapis jest czytelniejszy. A przy ponad 400 linijkach na klasę ( licząc PHPDoc ) robi to już sporą różnicę.
Go to the top of the page
+Quote Post
LBO
post
Post #35





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


1. Tak sadzę, że wynajdujesz koło na nowo (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

2. Po @return jest AgaviModel, ale ostatnio rezygnuje z modeli przywiązanych do frameworka i robię na czystych obiektach PHP. Kod jest bardziej przenośny.

3. Moim zdaniem pobieranie modelu leży w gestii kontekstu.
Go to the top of the page
+Quote Post
nasty
post
Post #36





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


Cytat
Druga sprawa to sprawdzanie implementowanych interfejsów.
a instanceof?
Go to the top of the page
+Quote Post
pinochet
post
Post #37





Grupa: Zarejestrowani
Postów: 120
Pomógł: 12
Dołączył: 9.10.2008
Skąd: Tricity.Rumia()

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


Witam chciałbym się przyłączyć do dyskusji.
Otóż tak jak Kocurro uważam iż implementacją singletonu jest klasa statyczna ... kto powiedział że ona nie ma instancji? to jest rzecz czysto abstrakcyjna - możemy założyć że ma jedną niepowtarzalną instancję do której programista nie ma poprostu dostępu, każdy dowód na to ( a przynajmniej nie przychodzi mi nic do głowy teraz) że klasa statyczna nie jest singletonem mozna skierowac przecikwo "singletonowi z jawną instancją". Gdzieś kiedyś czytałem że singleton to poprostu obejście braku klas abstrakcyjnych w php 4.
Jeżeli kody takie jak ten zaprezentowany przez orglee #28 mają dowodzić potrzeby zastosowania Singletonu to nie mamy o czym rozmawiać. Przypisanie instancji do zmiennej statycznej i odwoływanie się do tychże singletonów przez klasę główną nie ma żadnego sensu(w sensie singletonowym ;] ). Zaryzykuję stwierdzenie, że aplikacja ta nie wykorzystuje wogóle wzorca singleton aczkolwiek może go implementować.(wniosek ... )
A do eliminacji pomyłek to polecam coś takiego:
  1. <?php
  2. class Niby_ze_potrzebuje_singletonu{
  3.    private static $flaga = 0;
  4.    function __construct(){
  5.      if(self::$flaga) throw new Exception("mea culpa, mea maxima culpa, najpierw projekt potem implementacja.");
  6.      self::$flaga = 1;
  7.    }
  8. }
  9. ?>
Go to the top of the page
+Quote Post
starach
post
Post #38





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Jak najbardziej masz racje nasty. Zapomniałem tylko dodać że drugi parametr u mnie jest tablicą i zwyczajnie sprawdzam czy kilka interfejsów implementuje dany obiekt. Dobra ale zostawmy ten temat już.

Tak się w sumie zastanawiam nad waszym sposobem interpretacji Context'u. Wertując kod Symfony zatrzymałem się chyba na parsowaniu plików konfiguracyjnych i olałem ten framework ( powody pozwolę sobie zostawić na jakiś inny moment żebyśmy nie zbaczali z tematu ), więc na dobrą sprawę Contextu jako takiego, to ja tam specjalnie nie widziałem. wrzasq ma zapewne racje ze swoim zdziwieniem oglądając moją hybrydę rejestru, singletona i hmm contextu? Może żeby wyjaśnić zawiłości związane z tym tematy i mój brak specjalnego obeznania z tym wzorcem, ktoś machnąłby jakiś "życiowy" przykład jego wykorzystania. No tak z grubsza chociaż żeby można było poznać jego zalety. Wzrokowiec i słuchowiec, bo zdaje mi się że tutaj leży mój problem ze zrozumieniem o co wam chodzi.

p.s. Wywalam gettery. DRA_Engine będzie tylko inicjalizował obiekty silnika a nie przechowywał je celem pobrania.
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #39





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Cytat
Gdzieś kiedyś czytałem że singleton to poprostu obejście braku klas abstrakcyjnych w php 4.

To się na humor nadaje tylko (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Jedno zdanie burzy Twoją argumentację:
Obiekt posiada tożsamość, klasa statyczna nie.
To jest różnica jak w reklamie Żywca (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam
Go to the top of the page
+Quote Post
qba_rox
post
Post #40





Grupa: Zarejestrowani
Postów: 29
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Warszawa

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


Cytat(pinochet @ 11.01.2009, 00:06:04 ) *
Otóż tak jak Kocurro uważam iż implementacją singletonu jest klasa statyczna ... kto powiedział że ona nie ma instancji? to jest rzecz czysto abstrakcyjna - możemy założyć że ma jedną niepowtarzalną instancję do której programista nie ma poprostu dostępu, każdy dowód na to ( a przynajmniej nie przychodzi mi nic do głowy teraz) że klasa statyczna nie jest singletonem mozna skierowac przecikwo "singletonowi z jawną instancją".


No to sie mylisz brachu i powiem Ci dlaczego.

Klasa jest tylko pewna struktura, opisem zachowywania sie obiektow i zadna (nawet najmniejsza ;p) jej instancja nie jest alokowana w pamieci. Gdyby mozna bylo dodac dyrektywe static przed nazwa klasy, to wtedy prawdopodobnie mozna byloby tak powiedziec. Idac dalej, pola statyczne w klasie sa inicjalizowane w pamieci, dlatego mozesz na nich operowac. A klasa wtedy jest tylko takim interfejsem dostepu do tych danych. Poza tym, wg definicji, tworzac obiekt, tworzysz instancje, w zadnym innym wypadku. W pamieci jest tylko przechowywana jej struktura, bys ty sam ta instancje mogl powolac.

A skoro instancje, programista moze powolac tylko tworzac nowy obiekt, singleton znaczy nie inaczej niz, pozwolenie na stworzenie tylko jednego obiektu. Poza tym dzieki temu ze jest to obiekt, mozesz go np serializowac i zapisac w cachu, klasy (tej niby statycznej) nie zserializujesz. Nic z nia nie zrobisz. mozesz tylko (powtorze sie) przez nia uzyskac dostep do blokow pamieci (pola statyczne).

Dlaczego singleton nie jest antywzorcem? Przykladem jest sesja. moze byc tylko jedna. Nie mozemy wiec pozwolic na tworzenie wiecej niz jednego obiektu sesji, bo to mogloby miec fatalne skutki, np zniszczeniem danych sesyjnych. No i oglnie rzecz biorac, Sesja jest jedna, wiec jak moze byc reprezentowana przez kilka obiektow?

Pozdrawiam

Ten post edytował qba_rox 12.01.2009, 01:30:47
Go to the top of the page
+Quote Post
pinochet
post
Post #41





Grupa: Zarejestrowani
Postów: 120
Pomógł: 12
Dołączył: 9.10.2008
Skąd: Tricity.Rumia()

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


Jeśli chodzi o serializację - można to oczywiście obejść ale jeśli chodzi o wygodę to może racja że lepiej singleton, aczkolwiek dalej twierdzę, że stosowanie wyżej wymienionych jest następstwem niechlujnego projektowania aplikacji. BTW po co serializować klasę łączącą z bazą danych?.
Co do php4 to się nie znam ... miałem przerwę między wersjami 3 i 5 :]
Chyba rzeczywiście z siebie głupka zrobiłem (IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif) ...
Go to the top of the page
+Quote Post
wrzasq
post
Post #42





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

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


Cytat
dalej twierdzę, że stosowanie wyżej wymienionych jest następstwem niechlujnego projektowania aplikacji

bo zes sobie ubzdural, ze singleton to jakies "obejscie z PHP4" albo tylko i wylacznie "zamiennik dla rejestru/kontekstu/klasy statycznej". na tym polega istota singletonu wlasnie, ze udostepnia on instancje (obiekt) danej klasy i pozawala na istnienie TLYKO JEDNEJ takiej instancji. nie chodzi o przekazywanie go w jakis niejawny sposob, tylko o zapobieganie tworzenia wiecej niz jeden instancji klasy, ktora nie powinna miec ich tyle. to jest istota singletonu.
Go to the top of the page
+Quote Post
LBO
post
Post #43





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Dorzucę swoje 0,02zl

Singleton nie jest złym wzorcem. Ma swój sens i cel. Niestety implementacje, które są propagowane w światku PHP (ten z getInstance()) kuleją bardzo z powodu niewrażliwości na kontekst wywołania i zafałszowania (narzuca obiektowi działanie niezgodne z jego dziedziną). Robią się z Tego takie globale. Wspomniał ktoś tutaj, że hermetyzacje (każdej aplikacji) można złamać na wiele sposobów. Trudno się z tym nie zgodzić, ale czy to powód, że od samego początku, że się tak wyrażę kolokwialnie, srać sobie w kodzie?

Bardzo ładnie radzą sobie frameworki, chociażby, Javowe używając prześwietnych kontenerów IoC. To one załatwiają sprawę singletona, więc pisząc obiekt nie zastanawiasz się, czy ma być singletonem (separation of concerns), czy nie. I nie natkniesz się na problem przy testowaniu takiego obiektu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Bo testability leci pod sufit wtedy.

Ten post edytował LBO 19.04.2009, 10:14:38
Go to the top of the page
+Quote Post
nasty
post
Post #44





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


Cytat(qba_rox @ 12.01.2009, 02:20:52 ) *
Dlaczego singleton nie jest antywzorcem? Przykladem jest sesja. moze byc tylko jedna. Nie mozemy wiec pozwolic na tworzenie wiecej niz jednego obiektu sesji, bo to mogloby miec fatalne skutki, np zniszczeniem danych sesyjnych. No i oglnie rzecz biorac, Sesja jest jedna, wiec jak moze byc reprezentowana przez kilka obiektow?
Pozwolę sobie nie zgodzić się i wyprowadzić Cie z błędu przy okazji (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Załóżmy, że klasa Session jest klasą która opisuję sesję. Tworzona jest tylko raz, na początku działania frameworku, następnie przekazywana do Request, następnie, Controller i potem do Response.

Jak widać masz jedną klasę, która ma swoje określone workflow, wiadomo w jakiej kolejności co i jak ma do niej dostęp - w taki sposób, że możesz narysować diagram "podań" ten klasy. Czy taki model nie jest dużo czytelniejszy niż singleton?

I teraz rozważmy możliwość tworzenia nowych instancji Sessji, gdzie wiemy, że sesja jest tylko jedna.

Jak to bywa z obiekatmi kontekstowymi, są one przekazywane w parametrach metod do kolejnych klas, i nawet jak utworzysz nowy obiekt klasy Session, to on i tak będzie pusty a spopulowany danymi obiekt będzie tylko ten który był w parametrze - więc jaki problem? imho, żaden.

Za używanie Singletonów powinni bić po mordzie i tyle (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
nasty
post
Post #45





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


Cytat(guitarnet.pl @ 23.04.2009, 05:23:11 ) *
@nasty
tak wlasnie programuja w microsofcie (...)
Potraktuję to jako komplement (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
qba_rox
post
Post #46





Grupa: Zarejestrowani
Postów: 29
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Warszawa

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


@nasty
Pozwole sobie odpisac (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Smiem poddac w watpliwosc twoje zrozumienie singletonu. Singleton nie definuje ci jak ma przebiegac workflow obiektu. Chodzi tu o nic innego, jak tylko o mozliwosc powolania jednej instrancji. Sesja jest z definicji bytem takim jak np u czlowieka swiadomosc. Mozesz miec tylko jedna i nie mozesz miec drugiej chocby byla pusta (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Wiec nie mozesz nawet pozwolic na utworzenie obiektu, bo jest to poprostu nie zgodne z logika. Sa pewne byty, ktore nie moga byc traktowane jak np myszka od komputera, ktorej "objekt" w fabryce myszek jest "tworzony" wielokrotnie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

A wracajac do twojego workflow, to co stoi na przeszkodzie dac dostep do metody 'getInstance()' tylko raz? Mam na mysli, ze jesli obiekt jest juz powolany, to getInstance zeby zwracala null (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) i nikt nie bedzie wtedy traktowal jej jako global i zachowasz swoj magiczny workflow, ktory prawdopodobnie jest spoko i ma duzo sensu w sobie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

btw. nie jestem fanem traktowania singletonu jako ominiecia zmiennych globalnych (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
nasty
post
Post #47





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


Drogi @qba_rox, zauważ jednak, że takie uniemożliwianie wykonania getInstance() więcej niż jeden raz, jest już takjakby hackiem singletona, a to samo masz w obiekcie kontekstowym, on jest przekazywany tylko raz.

Załóżmy taką sytułację, że w pewnym momencie chciałbyś odtworzyć pewną sesję - np. masz aplikację z opcją "zapisz sesję" i po ponownym uruchomieniu, chciałbyś, żeby wszystko było jak po zamknięciu. Singleton Ci na to nie pozwoli, gdyż możesz tylko uzyskać obiekt który jest tworzony w ukrytym konstruktorze, nie możesz odtworzyć stan zachowanego (załóżmy, że zserializowanego) obiektu do tej ukrytej instancji, zachowanej w Singletonie. A z obiektem kontekstowym można takie coś zrobić.

A odnośnie świadomości... wydaję mi się, że za bardzo puściłeś wodzę fantazji przyrównując ją do sesji, bo jak wspomniałem, sesję można zachować, nie używać jej a następnie odtworzyć a świadomość nie, no chyba, że mówimy tu o bardzo zakrapianej alkoholem imprezie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
qba_rox
post
Post #48





Grupa: Zarejestrowani
Postów: 29
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Warszawa

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


Cytat(nasty @ 1.05.2009, 20:34:53 ) *
Drogi @qba_rox, zauważ jednak, że takie uniemożliwianie wykonania getInstance() więcej niż jeden raz, jest już takjakby hackiem singletona, a to samo masz w obiekcie kontekstowym, on jest przekazywany tylko raz.

Nie, nie jest hackiem. nadal pozwala ci powolac obiekt tylko raz, a to jest definicja singletona.


Cytat(nasty @ 1.05.2009, 20:34:53 ) *
Załóżmy taką sytułację, że w pewnym momencie chciałbyś odtworzyć pewną sesję - np. masz aplikację z opcją "zapisz sesję" i po ponownym uruchomieniu, chciałbyś, żeby wszystko było jak po zamknięciu. Singleton Ci na to nie pozwoli, gdyż możesz tylko uzyskać obiekt który jest tworzony w ukrytym konstruktorze, nie możesz odtworzyć stan zachowanego (załóżmy, że zserializowanego) obiektu do tej ukrytej instancji, zachowanej w Singletonie. A z obiektem kontekstowym można takie coś zrobić.

Jesli chcesz zastosowac swoj workflow, to oboje wiemy ze nie ma problemu, natomiast jesli chcemy miec dostep do sesji z kazdego miejsca aplikacji, to wtedy masz racje. jest to problem, ale do obejscia. wystorczy dodac metody, extract i populate (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Cytat(nasty @ 1.05.2009, 20:34:53 ) *
A odnośnie świadomości... wydaję mi się, że za bardzo puściłeś wodzę fantazji przyrównując ją do sesji, bo jak wspomniałem, sesję można zachować, nie używać jej a następnie odtworzyć a świadomość nie, no chyba, że mówimy tu o bardzo zakrapianej alkoholem imprezie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Hehhehe, dobre. Chocidzlo mi tu bardziej o byt (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #49





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




@nasty - a co jeśli obiekt, który tworzymy, dokonuje przy własnej konstrukcji zadania wpływające na resztę systemu, czy choćby dane?

  1. <?php
  2. class Ping
  3. {
  4.    public function __construct(VeryImportantLogger $oLogger)
  5.    {
  6.        $oLogger->log(__CLASS__);
  7.    }
  8. }
  9.  
  10. class LogAnalyzer
  11. {
  12.    public function pong(VeryImportantLogger $oLogger)
  13.    {
  14.        if(oLogger->hasMany('Ping'))
  15.        {
  16.            $this->callAlert();
  17.            die();
  18.            exit();
  19.            burnDisk('C:'); // (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
  20.        }
  21.    }
  22. }
  23. ?>
Go to the top of the page
+Quote Post
nasty
post
Post #50





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


@Cysiaczek, robi to samo, tyle, że na początku swojej podróży (workflow).

A nawet nie koniecznie na początku, może nawet w środku. Z tym, że mając to ładnie ułożone w workflow, wiemy dokładnie w której fazie aplikacji wszystko się dokonuję (w singletonie też niby wiemy, ale nie mamy takiej kontroli nad tym).

... i Cysiaczek, mógłbyś trochę bardziej rozjaśnić swoją myśl? bo wydaję mi się, że czytając ten kod mam lekki ocb (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #51





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




To jest ilustracja do pytania, które zadaję Tobie w nawiązaniu do:
Cytat
Jak to bywa z obiekatmi kontekstowymi, są one przekazywane w parametrach metod do kolejnych klas, i nawet jak utworzysz nowy obiekt klasy Session, to on i tak będzie pusty a spopulowany danymi obiekt będzie tylko ten który był w parametrze - więc jaki problem? imho, żaden.


Utworzenie wielu instancji klasy Ping w tym konkretnym przypadku skutkuje katastrofą w zupełnie nieoczekiwanym miejscu. Aby temu zapobiec, należy uniemożliwić powołanie więcej niż jednej instancji klasy Ping, a więc skorzystać z wzorca Singleton. To jest przypadek uzasadnionego użycia.

Pozdrawiam
Go to the top of the page
+Quote Post
LBO
post
Post #52





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Cytat(nasty @ 1.05.2009, 21:34:53 ) *
...


Cysiaczku, jak mniemam nie spotkałeś się jeszcze z kontenerami IoC? Są one najlepszym przykładem, że logika odpowiedzialna za powoływanie singletonów powinna być zewnętrzna. Kod jest prostszy, a nasty wskazał dobry przykład gdzie getInstance tylko komplikuje wszystko.
Go to the top of the page
+Quote Post
pejott
post
Post #53





Grupa: Zarejestrowani
Postów: 81
Pomógł: 4
Dołączył: 15.02.2009

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


Cały problem w tym, że zaczęto implementować wzorzec singleton w celu udostępnienia jakiegoś obiektu w całej aplikacji.
Ma on swoje konkretne i teoretycznie jedno przeznaczenie, czyli uniemożliwienie stworzenia kilku instancji obiektu.
Wiele osób stosuje go, na przykład przy obiekcie do zarządzania bazą danych, co jest dla mnie bzdurnym rozwiązaniem.
Jest to wręcz nielogiczne, gdyż czasem potrzebujemy wielu połączeń z różnymi bazami.
Ja odciąłem się od singletona w moich projektach i jakoś żyję.

Pozdrawiam.
Go to the top of the page
+Quote Post
nospor
post
Post #54





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Ja odciąłem się od singletona w moich projektach i jakoś żyję.
Mozna sie odciac od obiektowki i pisac tylko strukturalnie i też mozna jakos zyc (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Wszystko zalezy od własciwego wykorzystania i umiejetnosci programisty. Toczy sie równolegle temat o dziedziczeniu i tam dochodzą do podobnych wniosków (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
LBO
post
Post #55





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Cytat(pejott @ 13.05.2009, 12:00:11 ) *
Cały problem w tym, że zaczęto implementować wzorzec singleton w celu udostępnienia jakiegoś obiektu w całej aplikacji.
Ma on swoje konkretne i teoretycznie jedno przeznaczenie, czyli uniemożliwienie stworzenia kilku instancji obiektu.
Wiele osób stosuje go, na przykład przy obiekcie do zarządzania bazą danych, co jest dla mnie bzdurnym rozwiązaniem.
Jest to wręcz nielogiczne, gdyż czasem potrzebujemy wielu połączeń z różnymi bazami.
Ja odciąłem się od singletona w moich projektach i jakoś żyję.

Pozdrawiam.


@pejott, umknęło Tobie chyba, że tu nikt nie neguje singletona jako zbędnego wzorca.
To jest raczej wojna o to jak dochodzić do singletona. Jawnie - zaszywając logikę wewnątrz obiektu (np. getInstance()) czy niejawnie - czyli tworzenie obiektow gdzieś w niższej warstwie aplikacji i kontrolowane i ścisłe udostępnianie ich wyżej (loadery, kontenery i kontekst).

Ten post edytował LBO 13.05.2009, 11:46:50
Go to the top of the page
+Quote Post
pejott
post
Post #56





Grupa: Zarejestrowani
Postów: 81
Pomógł: 4
Dołączył: 15.02.2009

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


No tak, to było tylko ogólne spostrzeżenie na temat całego zamieszania wokół tego wzorca.
Teraz każdy początkujący w OOP, który usłyszał negatywną opinię na temat implementacji wzorca, nieświadomie twierdzi, że singleton jest zły.
Co do tej właściwej kwestii, to skłaniałbym się ku temu drugiemu rozwiązaniu, choć nie jestem pewien jak miałoby to wyglądać ?
Sam nie stosuje tego wzorca, ale wydaję mi się, że mam podobnie rozwiązaną kwestie przekazywania i kontrolowania dostępu do obiektów.
Mógłbyś podać przykład jak taki obiekt miałby być "powoływany do życia" i przekazywany dalej ?

Ten post edytował pejott 13.05.2009, 18:02:45
Go to the top of the page
+Quote Post
LBO
post
Post #57





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Przygotowałem malutki przykładzik. Mam nadzieję, że pomoże.

  1. <?php
  2. class Container
  3. {
  4.    /**
  5.      * Tablica singletonów.
  6.      *
  7.      * @var array
  8.      */
  9.    public $singletons = array();
  10.  
  11.    /*
  12.      * Tutaj sprawdzam czy kontener ma zwrócić singleton na podstawie jawnego
  13.      * interfejsu.
  14.      * W prawdziwej pełnej implementacji kontener może to robić na podstawie
  15.      * konfigu (np. XML) i/lub adnotacji phpDoc (np. @singleton).
  16.      */
  17.    public function get($classname)
  18.    {
  19.        $reflection = new ReflectionClass($classname);
  20.        if($reflection->implementsInterface('Singleton'))
  21.        {
  22.            if(!array_key_exists($classname, $this->singletons)) {
  23.                $this->singletons[$classname] = new $classname;;
  24.            }
  25.            return $this->singletons[$classname];
  26.        } else {
  27.            return new $classname;
  28.        }
  29.    }
  30. }
  31.  
  32. interface Singleton
  33. {}
  34.  
  35. /*
  36.  * To będzie singleton
  37.  */
  38. class User implements Singleton
  39. {}
  40.  
  41. /*
  42.  * A to nie będzie singletonem :)
  43.  */
  44. class Article
  45. {}
  46.  
  47. $container = new Container();
  48. $user1 = $container->get('User');
  49. $user2 = $container->get('User');
  50. var_dump($user1 === $user2); // true
  51.  
  52. $article1 = $container->get('Article');
  53. $article2 = $container->get('Article');
  54. var_dump($article1 === $article2); // false
  55.  
  56. ?>


edit:

Oczywiście podany przykład jest bardzo abstrakcyjny (w programistycznym sensie słowa). Np we frameworku Agavi ten sposób stosowany jest tylko przy pobieraniu klas modeli (agaviContext::getModel()) reszta obiektów jest za to wstrzykiwana do obiektu kontekstu.

Ten post edytował LBO 13.05.2009, 13:03:23
Go to the top of the page
+Quote Post
pejott
post
Post #58





Grupa: Zarejestrowani
Postów: 81
Pomógł: 4
Dołączył: 15.02.2009

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


Dzięki, właśnie tak to sobie wyobrażałem i prawie identycznie mam to rozwiązane u siebie, lecz w trochę innym kontekście/celu.

Pozdrawiam.
Go to the top of the page
+Quote Post
cojack
post
Post #59





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

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


Taki mi to singleton ze hoho, po prostu zwykly chory polimorfizm. To tak ja cala hora zabawa z interfejsami. A jak mi ktoś napisze że interfejsy rozwiązują wielodziedziczenie to własnymi rękoma udusze.
Go to the top of the page
+Quote Post
nospor
post
Post #60





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
A jak mi ktoś napisze że interfejsy rozwiązują wielodziedziczenie to własnymi rękoma udusze
To teraz leć na forum motoryzacyjne i wal z postem

A jak mi ktoś napisze że samochody rozwiązują problem latania to własnymi rękoma udusze

Oczywiste jest, ze interfejsy nie do tego sluzą, tak jak nie sluzą samochody do latania. Nie ma sensu wiec uprzedzac wypowiedzi wiedzących inaczej i walic takie posty (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
LBO
post
Post #61





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Cytat(cojack @ 20.05.2009, 10:30:34 ) *
Taki mi to singleton ze hoho, po prostu zwykly chory polimorfizm. To tak ja cala hora zabawa z interfejsami.


Powiedział co wiedział. Nawet się ortów nie będę czepiał (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nasty
post
Post #62





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


Bądź co bądź, to cojak ma rację w tym, że to nie jest Singleton.

LBO, ta klasa co zaprezentowałeś jest lekko zniekształconą implementacją wzorca Registry.

Ten post edytował nasty 20.05.2009, 13:49:20
Go to the top of the page
+Quote Post
cojack
post
Post #63





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

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


nospor niektórzy jednak tak uwarzają, podspodem link do skanu  z książki PHP i MySQL Vademecum Profesionalisty, odradzam ją wszystkim, którzy chcą się nauczyć php, wprowadza b.złe nawyki. Nie wiem co mogę polecić dla początkującego... ale wiem że ja zrobiłem źle, kupując tą książke (ale kiedy to bylo (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ).
(IMG:http://images43.fotosik.pl/128/097fc284e55452c1m.jpeg)

Ten post edytował cojack 20.05.2009, 15:57:11
Go to the top of the page
+Quote Post
Kocurro
post
Post #64





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

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


Widać, że niektórzy nie wiedzą po co jest dziedziczenie. Ale oczywiście bo JAVA tak robi to już musi być dobre - rzygać zaczyna się chcieć od tego tworu.
Go to the top of the page
+Quote Post
Crozin
post
Post #65





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


W Javie interfacey również nie służą wielodziedziczeniu, służą one dokładnie temu czemu służą w PHP - wymuszeniu na danej klasie implementacji pewnych zachowań - metod.
Go to the top of the page
+Quote Post
LBO
post
Post #66





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Cytat(nasty @ 20.05.2009, 14:46:42 ) *
Bądź co bądź, to cojak ma rację w tym, że to nie jest Singleton.

LBO, ta klasa co zaprezentowałeś jest lekko zniekształconą implementacją wzorca Registry.


Może i nie jest. Ale tylko dlatego, że ma sam wzorzec ma narzuconą implementację.
Poza tym wprowadzenie Singletona do aplikacji to nadal decyzja biznesowa. Są miejsca gdzie się sprawdzi, są takie gdzie już tego nie zrobi (jet to związane z tym, czy obiekt posiada stan, czy nie - kto ma zrozumieć to zrozumie).
Wyodrębnienie mechanizmu tworzącego Singletona ma tą zaletę, że:
1. Obiekty tworzy się jako bardziej reusable.
2. Większa kontrola nad kodem (dajmy na to języki z rozbudowaną wielowątkowością, dzięki mechanizmowi o którym pisaliśmy można decydować czy oba wątki mają dostać ten sam obiekt biznesowy, czy nie).
3. Z punktu drugiego można wnioskować, że testowalność obiektów się zwiększa.

Między innymi z powyższych powodów, uważa się Singletona (jako tego przedstawionego przez dajmy na to Wikipedię (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) :D) za antywzorzec - a nie dlatego, że jest brzydki i niefajny.

Zawsze będę uważał, że Singletona da się zastąpić przemyślaną inżynierią (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nieraczek
post
Post #67





Grupa: Zarejestrowani
Postów: 405
Pomógł: 6
Dołączył: 12.01.2007

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


Dzięki temu forum dowiedziałem się o wzorcu Singleton przy łączeniu z jedną bazą danych i od tego czasu czasu go używam w tymże celu. Jeśli metody w np. dwóch klas wymagają nawiązania połączenia z bazą danych to bez singletona byłoby ciężko, tworzenie w takich klasach obiektów klasy odpowiadającej za połączenie z bazą danych byłoby bez sensu, bo gdybym następnie utworzył obiekty tych klas to byłyby dwa połączenia z bazą danych. Singleton ułatwia sprawę. W google jest o singletonie bardzo dożo informacji i z tego co wyczytałem należy do najważniejszych wzorców, nie wiem dlaczego go krytykujecie skoro on na prawdę jest pomocny.

Ten post edytował nieraczek 22.05.2009, 14:33:16
Go to the top of the page
+Quote Post
LBO
post
Post #68





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Takie obiekty o jakich piszesz się przekazuje (dalej do innych instancji), a nie tworzy kilkakrotnie.
Go to the top of the page
+Quote Post
murwazy
post
Post #69





Grupa: Zarejestrowani
Postów: 53
Pomógł: 5
Dołączył: 13.04.2007
Skąd: Szczecin

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


Cytat(LBO @ 22.05.2009, 17:05:51 ) *
Takie obiekty o jakich piszesz się przekazuje (dalej do innych instancji), a nie tworzy kilkakrotnie.

albo uzywa sie singletona, ktory zwraca instancje juz utworzonego obiektu. przeciez po to jest ten wzorzec
Go to the top of the page
+Quote Post
Crozin
post
Post #70





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Singleton służy zapewnieniu, że w całej apliacji będzie tylko jeden obiekt danej klasy - po to jest ten wzorzec.
Go to the top of the page
+Quote Post
LBO
post
Post #71





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Cytat(murwazy @ 2.06.2009, 09:08:02 ) *
albo uzywa sie singletona, ktory zwraca instancje juz utworzonego obiektu. przeciez po to jest ten wzorzec


Czy ludzie nie czytają całych tematów? Patrzą tylko na dwa ostatnie posty i wyskakują z "genialnym" i "rozwiązującym wszelkie problemy (tj. głód, wojny i ubóstwo)" rozwiązaniem........ o_O?!?!?
Go to the top of the page
+Quote Post
murwazy
post
Post #72





Grupa: Zarejestrowani
Postów: 53
Pomógł: 5
Dołączył: 13.04.2007
Skąd: Szczecin

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


Cytat(LBO @ 2.06.2009, 16:05:20 ) *
Czy ludzie nie czytają całych tematów? Patrzą tylko na dwa ostatnie posty i wyskakują z "genialnym" i "rozwiązującym wszelkie problemy (tj. głód, wojny i ubóstwo)" rozwiązaniem........ o_O?!?!?

sa ludzie, ktorzy zastanawiaja sie nad tym co pisza
Go to the top of the page
+Quote Post
marcio
post
Post #73





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Cytat(murwazy @ 5.06.2009, 23:43:03 ) *
sa ludzie, ktorzy zastanawiaja sie nad tym co pisza


Ale sa tez tacy co nie mysla nad tym co inni pisza
Go to the top of the page
+Quote Post
nieraczek
post
Post #74





Grupa: Zarejestrowani
Postów: 405
Pomógł: 6
Dołączył: 12.01.2007

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


A jaka są właściwie zalety/wady używania w przypadku nawiązywania połączeń z bazą danych:

1. klasy do nawiązywania połączenia z bazą danych będącej singletonem; w drugiej klasie, której metody wymagają połączenia z bazą danych tworzenie w konstruktorze instancji klasy do nawiązywania połączenia z bazą danych przez wywołanie statycznej metody tej klasy zwracającej obiekt tej klasy

2. klasy do nawiązywania połączenia z bazą danych będącej zwykłą klasą; utworzenie obiektu tej klasy, utworzenie obiekt drugiej klasy, którego metody wymagają połączenia z bazą danych przekazując do jego konstruktora obiekt utworzonej uprzednio klasy do połączeń z bazą danych

?

Jest jakaś przewaga 1. sposobu nad 2. lub 2. nad 1. ?

Ten post edytował nieraczek 7.06.2009, 11:38:24
Go to the top of the page
+Quote Post
Crozin
post
Post #75





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Przewagi 2 na 1:
1) Możesz mieć wiele otwartych połączeń z bazą w tym samym czasie
2) Druga klasa staje się zdecydowanie bardziej elastyczna

Przewagi 1 nad 2:
-
Go to the top of the page
+Quote Post
marcio
post
Post #76





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Cytat
1) Możesz mieć wiele otwartych połączeń z bazą w tym samym czasie

Sorki ale nawet jakies opensource'owe cms'y/fora/portale korzystaja tylko z jednej bazy wiec to tylko jakis wynalazek chyba ze ktos pisze baze danych przestepcow dla FBI w USA to baz by musial miec 10 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
skowron-line
post
Post #77





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


to ja może bez zbędnego pi****** dam link
http://codersview.blogspot.com/search/labe...sign%20patterns
Go to the top of the page
+Quote Post
marcio
post
Post #78





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Cytat(skowron-line @ 7.06.2009, 13:15:29 ) *
to ja może bez zbędnego pi****** dam link
http://codersview.blogspot.com/search/labe...sign%20patterns

NIe rozumiem po co ten link zeby poczytac na czym polegaja dane wzroce to ja wiem.
Go to the top of the page
+Quote Post
Kamil Pietrzak
post
Post #79





Grupa: Zarejestrowani
Postów: 213
Pomógł: 10
Dołączył: 7.01.2010
Skąd: Lublin

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


no to pojechali...
...ale chyba dobry temat znalazlem

szukalem jakiegos skryptu na ktorym moglbym sie powzorcowac, moze niekoniecznie arta bo jestem dupa z angielskiego
zaczalem czytac joomle, jest zdecydowanie za duza
moze ktos ma lepszy pomysl co by podejrzec jakies rozwiazania ?
Go to the top of the page
+Quote Post
XianN
post
Post #80





Grupa: Zarejestrowani
Postów: 57
Pomógł: 9
Dołączył: 12.11.2005
Skąd: ze wnowu?!

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


joomle to poczytaj jak nie pisac. A na symfony sie ucz.
Go to the top of the page
+Quote Post
Kamil Pietrzak
post
Post #81





Grupa: Zarejestrowani
Postów: 213
Pomógł: 10
Dołączył: 7.01.2010
Skąd: Lublin

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


zaraz sciagne i zobacze, na pewno nie zaszkodzi, moze jeszcze zaczne pisac z frameworkiem (IMG:style_emoticons/default/winksmiley.jpg)
tylko symfony to framework, a ja bardziej chcialem zobaczyc jak sie buduje cmsy
Go to the top of the page
+Quote Post
lukasz.adamczews...
post
Post #82





Grupa: Zarejestrowani
Postów: 10
Pomógł: 2
Dołączył: 23.02.2010

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


zobacz sobie sympala to tzw. content management framework czyli framework do tworzenia cmsów oparty na symfony mający wiele zaawansowanych opcji przydatnych w budowaniu własnego backendu. fajnie się tez prezentuje apostrophe tez na bazie symfony umożliwiający kontekstową edycję strony na zasadzie edytowalnych bloków tekstu
Go to the top of the page
+Quote Post

5 Stron V   1 2 3 > » 
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 06:24