Każdy z nas korzystał już chyba z relacyjnych baz danych. Nawet jeżeli nie było to MySQL, PostgreSQL czy Oracle to prawdopodobnie spotkaliście się z nimi na zajęciach z informatyki, gdzie był prezentowany Microsoft Access. Nie sposób przedstawić zalet i korzyści wynikających z teorii relacyjnych baz danych i matematycznego podejścia do przechowywania danych.
Niestety czekają nas także liczne ograniczenia. Mnie osobiście zawsze bolało zderzenie obiektowych systemów z relacyjnymi danymi, gdzie bardzo często dochodziło do zastosowania ORM-a (nigdy nie lubiłem, nie lubię i chyba już nie polubię tego rozwiązania nawet pomimo tego, że Doctrine 2.0 szykuje się całkiem smakowicie). Nie przedłużając zbytnio, w końcu wyłoniła się grupa przeciwników systemów RDBMS i standardu SQL z takimi projektami jak Amazon SimpleDB, Cassandra (używane przez Facebook i wkrótce także Digg), CouchDB czy MongoDB.
Continue reading →
Aby nasz kod stawał się coraz lepszy, elastyczniejszy, bardziej przejrzysty powinniśmy stosować wiele różnych narzędzi. Ich dobór powinien zależeć od wymagań projektu, gdyż nie zawsze potrzebujemy wytaczać armaty na proste Hello World. Generalnie ich dobór w dużej mierze będzie zależał od docelowego odbiorcy. Projekty możemy podzielić na 3 główne grupy:
- własne – pisane na potrzeby chwili, do rozwiązania dręczących nas problemów
- na zlecenie – pisane w pojedynkę, ale gdzie wpływ na naszą pracę ma zewnętrzna osoba
- pisane w grupie – czy OpenSource, czy komercha, nasz kod wpływa na innych, a kod innych na nasz
Można to także traktować jako swego rodzaju rozwój. Jako młodzi adepci sztuki programowania zaczynamy od dłubania w domowym zaciszu, powoli otwieramy się na świat i przyjmujemy nowe wyzwania. Rozwija się także nasz warsztat. Problem jedynie w tym, żeby przechodząc między poszczególnymi poziomami nie kastrować siebie jako programisty. Bo jasnym jest, że wielokrotnie będziemy chodzili w górę i w dół tej listy.
Continue reading →
a co by był lepszy niż poprzedni: wydrukować i powiesić na ścianie. Wzorce projektowe GoF w pigułce. Niech Wasz kod elastyczniejszym będzie.
Dla osób znających temat z innych języków, tytuł może wydawać się nieco na wyrost. PHP nie ma takich narzędzi, by móc ten język nazwać w 100% zgodnym z podejściem programowania kontraktowego. Przynajmniej nie w rozumieniu znanym z implementacji Eiffel czy D 2.0.
Możecie się ze mną zgodzić lub też nie, opinie w światku są różne, jednak dla mnie „zakontraktowanie” funkcjonalności elementu to najzwyklejszy interfejs. W taki sposób podejście „design by contract” postrzegam nie tylko ja, ale także ludzie zorganizowani wokół Zend Framework w wersji 2.0.
Continue reading →
Kiedy przychodzi zarządzać coraz większą i większą ilością obiektów (pomyśl o frameworkach czy CMS-ach) bardzo szybko możemy zaobserwować pewną niedoskonałość wstrzykiwania zależności z zewnątrz. Musimy za każdym razem inicjować obiekt i zadbać o część jego funkcjonalności. Gdy zaczynamy się z tym borykać w wielu miejscach aplikacji czas pomyśleć o kolejnym kroku – Dependency Injection Container.
Continue reading →
To co odróżnia programistę od dobrego programisty to umiejętność projektowania aplikacji, przewidywania drogi, jaką pójdzie rozwój projektu i pozostawienie sobie furtki do łatwych modyfikacji w przyszłości. Początkujący bardzo często mylą sobie naukę programowania z nauką tworzenia dobrego kodu. Szczególnie widoczne jest to wśród programistów PHP, gdzie do nauczenia się podstaw języka wystarczy kilka wieczorów. Dzisiaj chciałbym rozpocząć serię postów, które mam nadzieję pomogą przy tworzeniu takiego kodu, który będzie łatwo utrzymać i wykorzystać w przyszłych projektach.
Zakładam, że czytelnik zaznajomiony jest z ideą OOP. Wie, co to klasy, obiekty, metody. Wie, co powinna reprezentować sobą klasa, a co obiekt.
Continue reading →
Zauważyłem, że w ostatnim czasie darzę dziwnym uwielbieniem projekty spod skrzydeł Fabiena Potenciera. I chociaż symfony 1 nie lubię, nie lubię przyjętej przez Sensio Labs konwencji nazewniczej (sfCamelCase) to ich najnowsze produkty zmierzają dokładnie w takim kierunku, w jakim widziałbym szansę dla PHP. Mieliście o Twigu, mieliście wzmiankę o Templating Component który znajdzie zastosowanie w Symfony 2, odwoływałem się trochę do Doctrine.
A dziś przyszedł czas na odświeżony framework do testowania – lime. I polecam go nie z powodu uwielbienia dla bibliotek wyżej wspomnianej firmy, ale dlatego, że to nieco inne podejście do testów, jakie znamy w PHP Continue reading →
Gdyby ktoś dwa dni temu zapytał mnie o system szablonów w PHP prawdopodobnie użyłbym wszystkich poznanych środków perswazji, aby „wyleczyć” go z takich bibliotek. Zarzekałem się, że PHP zostało stworzone do wypełniania HTML-a danymi i że tak naprawdę nic więcej nie potrzeba. A to, że w głębi duszy przeklinałem każdy dzień spędzony przy tworzeniu szablonów niespecjalnie wpływało na moją opinię. Nie wiem, jakaś męka w imię wyższej sprawy czy coś.
W każdym razie ten stan minął po przeczytaniu ostatniego wpisu na blogu Fabiena Potenciera (twórca symfony, a także wielu świetnych komponentów które znajdują u mnie zastosowanie na co dzień – o tym jednak w innym wpisie). Czy jesteście zwolennikami ułatwiania sobie życia takimi metodami, czy też uważacie za bezsensowną naukę kolejnego „języka”, naprawdę gorąco zachęcam do przeczytania. Continue reading →
W ostatnim czasie ciężko przeoczyć dumne nagłówki krzyczące o kolejnych RESTfulowych aplikacjach czy frameworkach. Zapewne zastanawiasz się, czy możesz wpleść styl REST (Representational State Transfer) w swoją aplikację i jakie będą tego wymierne korzyści? Odpowiedź na pierwsze pytanie brzmi – oczywiście, ale raczej tylko wtedy, gdy Twoja aplikacja otwiera się na świat dzięki zewnetrznemu API. Dostosowując je do tego stylu z pewnością ułatwisz pracę programistom chcącym wnieść coś do Twojego projektu.
Continue reading →
Przyjemne usprawnienie napotkane zupełnie przypadkiem (chociaż ten już nie był taki miły). Dotychczas, chcąc wywołać statyczną metodę klasy, której nazwę mieliśmy zapisaną w zmiennej, musieliśmy to zrobić w niezbyt elegancki sposób:
<?php
class MyClass {
static public function staticMethod() { echo "Hello!"; }
}
$class = 'MyClass';
call_user_func(array($class, 'staticMethod'));
// As of 5.2.3
call_user_func($class . '::staticMethod');
Udogodnienie dostarczone z aktualizacją pozwala nam zrobić to w znacznie przyjaźniejszy i bardziej naturalny sposób.
$class::staticMethod();