Singleton

Singleton jest chyba pierwszym z “wzorców projektowych” jaki wszyscy poznaliśmy. Prosty w implementacji, jeszcze łatwiejszy w użyciu, ale pociągający za sobą stos negatywnych konsekwencji. W poszukiwaniu informacji i zdań o singletonie w polskim internecie trafiłem na Wikipedię, gdzie znalazłem zdanie, które podsumowało to czym jest tenże “wzorzec”: Singleton jest też uznawany za antywzorzec, gdyż często jest tylko eufemizmem dla zmiennej globalnej. W książce " Refaktoryzacja do wzorców projektowych" padają kolejne dwa ważne zdania: ...

February 1, 2007 · 4 min · splatch

Zend Framework i inni

Zend od jakiegoś czasu rozwija z powodzeniem swój framework. Szturmuje on rynek dzięki wsparciu firmy i dobrej dokumentacji. Zastanawia mnie jednak, dlaczego inni zaczęli kopiować to co w ZF jest. Rozumiem konwencję nazewniczą, ok - to może komuś się podobać, rozumiem strukturę katalogów, może ktoś uzna ją za logiczną.. Nie mniej nazewnictwo i struktura prawdę mówiąc nie różni się niczym od tego co było standardem w PEAR. Co więcej, niektórzy po prostu przepisują spore fragmenty kodu, które są w ZF na swoje. Zapytam po co? Skoro jest coś podobnego w Zendzie to jaki sens jest w powielaniu praktycznie tego samego (Zend::loadClass, ZendRegistry, Zend_Router_Rewrite itp.)? Pomijam fakt, że Zend jest otwarty w tej chwili i na pomysły i na ludzi i zapytam, czy to ma jakiś sens? ...

October 3, 2006 · 2 min · splatch

PHP Unit 3 i Mock Objects

Dzisiejszego dnia skończyłem opisywać implementację techniki Mock Objects przy użyciu PHP Unit. Zapraszam do zapoznania się z tekstem i wyrażania opinii na jego temat.

September 27, 2006 · 1 min · splatch

Propel 1.2 - konfiguracja generatora

Dzisiaj na wiki opisałem wszystkie znane dyrektywy konfiguracyjne generatora dla Propela 1.2 (wygląda na to, że pokrywają się one w dużej mierze z dyrektywami Propela 2.0). W najbliższym czasie opis konfiguracji projektu.

September 23, 2006 · 1 min · splatch

Cache w Smarty

Wiem, że Smarty ma równie wielu przeciwników co zwolenników, ale odcinając się od dyskusji postanowiłem polecić zarówno tym pierwszym jak i drugim artykuł na temat obsługi cache w Smarty.

September 23, 2006 · 1 min · splatch

Propel 1.2 - przyśpieszamy

Zachęcony komentarzem do poprzedniego posta postanowiłem zoptymalizować cały builder dla Propela. Zasada działania jest taka sama jak wcześniej - usunięcie zbędnych iteracji. Kod generowany przez moje poprawki nie należy do najszybszych, ale z moich testów wynika jednoznacznie - jest szybszy. Szybki sposób instalacji FasterPHP5ComplexPeerBuilder.php: pobrać plik http://delta.dywicki.pl/propel/FasterPHP5ComplexPeerBuilder.php skopiować do folderu propel/engine/builder/om/php5. w build.properties dla projektu ustawić dyrektywę: [code]propel.builder.peer.class = propel.engine.builder.om.php5.FasterPHP5ComplexPeerBuilder[/code] Wskazuje ona na nazwę klasy której obiekt będzie odpowiedzialny za wygenerowanie kodu dla klasy tabeli (*Peer). Po tym wszystkim odpalamy generator z targetem om poleceniem: [code]propel-gen katlog-projektu om[/code] bądź [code]phing -Dproject=nazwa -Dtarget=om[/code]. ...

September 22, 2006 · 1 min · splatch

Propel 1.2 - przyśpiesz go nawet do 2 razy!

Jak wiadomo szybkość nie jest domeną Propela. Dzisiejszego popołudnia na oficjalnym kanale Propela odbyłem rozmowę z osobą która twierdziła, że można przyśpieszyć propela o 3 razy (a przymajmniej metodę doSelectJoinAll). Nie zdziwcie się - miała ona rację! :) Problem w doSelectJoinAll polega na tym, że są wykonywane zbędne iteracje mające na celu sprawdzenie czy element zawiera obiekt dołączanej encji. Można je z powodzeniem zastąpić odpowiednią mapą, która zawiera identyfikatory tych encji, które już są dodane do obiektu. Osoba, która to twierdziła miała odpowiedni kod, który zgadnijcie - zadziałał. Aby zamiana była uniwersalna - zmieniłem co trzeba w generatorze. Sama metoda działa dwa i pół raza szybciej! Dla zainteresowanych - plik zmieniony przeze mnie - PHP5ComplexPeerBuilder.php. Sprawdź czy Twoje doSelectJoinAll przyśpieszy. :) ...

September 21, 2006 · 1 min · splatch

Gotowe rozwiązania

Zapraszam do zapoznania się z tekstem odnośnie użycia frameworków, który opublikowałem wczoraj na wiki.

September 19, 2006 · 1 min · splatch

Kilka słów na temat Creole

Dzisiejszego popołudnia udało mi się napisać kilka zdań na temat Creole. Zaintereoswanych zapraszam do odpowiedniej kategorii na moim prywatnym wiki. Komentarze proszę umieszczać pod tym postem.

September 16, 2006 · 1 min · splatch

Propel 2.0, co nowego

Od jakiegoś czasu trwają prace nad drugą wersją propela. Do najważniejszych zmian należy przejście na PDO. Jest to fakt, który najbardziej mnie smuci. Koszt zwiazany z wykorzystaniem Creole był zbyt wysoki jak na ORM i autorzy przeszli na znacznie szybsze PDO. W tej chwili dla każdej bazy danych jest stworzony odpowiedni, prosty adapter. Ilość obsługiwanych baz danych nie wzrośnie. W dalszym ciągu będzie to MySQL, PostgreSQL, Oracle, Microsoft SQL Server (Sybase), SQLite. Niewątpliwą nowością jest cache, który będzie prawdopodobnie funkcjonował jako kolejny adapter. Mam nadzieję, że dodanie cache przyśpieszy nieco Propela, ponieważ część obiektów, mimo, że nie jest zmieniana (jest to fragment złączenia) zawsze jest pobierana i transformowana. Spore zmiany zajdą w Criterii. W drugiej wersji budowanie złożonych warunków stanie się banalne, a to za sprawą całkiem nowej implementacji. Doczekamy się w końcu obsługi idenity map, dzięki czemu klucz główny zawsze będzie wskazywał ten sam obiekt. ...

September 10, 2006 · 1 min · splatch