Symfony 2 opublikowane (podczas Symfony Live 2010)

Ten wpis został napisany dawno temu i może być już nieaktualny.

Podczas pierwszej międzynarodowej konferencji Symfony Live, Fabien Potencier upublicznił Symfony 2. Nowoczesne podejście i sprawdzone praktyki, podpatrzone w innych pierwszoligowych projektach Open Source, tworzą wybuchową miksturę, która ma szansę zrewolucjonizować świat PHP. Stabilna wersja planowana jest na koniec 2010 roku. Mimo to framework już wygląda imponująco. Symfony zyskuje duże 'S'! Oto szybki przegląd frameworka nowej generacji.

Zabijając magię

Wiele problemów związanych z symfony 1.x spowodowane było przez wszechobecną magię. Cóż... **w Symfony 2 magia umiera. ** Przede wszystkim będziemy zmuszeni otwarcie deklarować swoje zamiary. Framework nie będzie więcej starał się ich "zgadnąć". Powinno to zwiększyć czytelność kodu i zmniejszyć krzywą nauki. "Inteligencja" symfony 1.x sprawia, że framework staje się trudny do kontrolowania. W wielu sytuacjach nie wiedzieliśmy co i dlaczego się działo. Jawne deklarowanie swoich zamiarów zmniejszy ilość WTFs/m.

Krzywa nauki

Symfony 1.x ma jedną z bardziej stromych krzywych nauki ze wszystkich frameworków PHP. Oferuje dużo, ale jego poznanie i uzyskanie biegłości zajmuje sporo czasu. **Podstawowe koncepcje stojące za Symfony 2 poznacie w 20 minut. **Po godzinie możecie zacząć pisać kod. Brzmi zachęcająco i zapewniam, że to prawda. Sprawdźcie sami czytając Quick Tour.

Co się zmieniło?

Symfony 2 opiera się zaledwie na kilku koncepcjach. Jest niemal genialne w swojej prostocie. Osiągnięto to przez zastąpienie wielu skomplikowanych wzorców kilkoma, bardziej potężnymi. Framework jest spójny. Po poznaniu podstaw powinniście być w stanie "zgadnąć" jak działają funkcjonalności, których potrzebujecie.

Wstrzykiwanie Zależności (Dependency Injection Container)

Całe multum koncepcji symfony 1.x takich jak kontekst, czy konfiguracje, zostały zastąpione przez Dependency Injection Container (dostępny jako Symfony Component). Czyni to konfigurację łatwiejszą i bardziej elastyczną. Co jest nawet ważniejsze wstrzykiwanie zależności pozwoliło uczynić Symfony 2 lekkim frameworkiem.

Paczki, tobołki, bundles (dawniej pluginy)

W 1.x pluginy wprowadzono relatywnie późno. Z założenia miały odwzorowywać strukturę aplikacji, by być rozszerzalne i reużywalne. Koncepcja słuszna, jednak architektura frameworka ją nieco ograniczyła. W Symfony 2 pluginy zyskały więcej uwagi. Zajęły tak specjalne miejsce, że zmieniono im nazwę. Pluginy od tej pory nazywamy bundles (czyli paczki, tobołki). **Właściwie, to wszystko jest bundle. **Cały kod, który będziemy pisać, czy instalować zorganizowany jest w paczki. Z uwzględnieniem frameworka. Paczki mogą być rozszeżane i nadpisywane tyle tylko ile chcemy. Daje to dużą swobodę i elastyczność (elastyczność często się pojawia, gdy mówimy o Symfony 2).

Warstwa prezentacji (widok)

W symfony 1.x używamy szablonów, partiali, komponentów, layoutów, slotów i komponento-slotów. Całkiem sporo koncepcji jak na prostą warstwę prezentacji. Mogą przyprawić o duży bół głowy niejednego grafika. W Symfony 2 widok składa się z szablonów i slotów (templates + slots). Oczywiście żadne funkcjonalności nie zostały zatracone. Wręcz przeciwnie. Dodano nieco elastyczności dzięki takim smaczkom jak wielopoziomowe dekorowanie szablonów.

Piekielna szybkość

Wszystkie nowe koncepcje stojące za Symfony 2 czynią framework ekstremalnie szybkim. Benchmark na prostej aplikacji, która wykorzystuje standardowo używane funkcjonalności frameworka udowadnia, że Symfony 2 jest:

  • 2x szybsze niż Solar 1.0.0
  • 2.5x szybsze niż symfony 1.4.2
  • 3x szybsze niż Zend Framework 1.10
  • 4x szybsze niż Lithium
  • 6x szybsze niż CakePHP 1.2.6
  • 60x szybsze niż Flow3 Do tego Symfony 2 zjada połowę mniej pamięci niż symfony 1.x, czy Zend Framework.

Zawsze najlepsze

Symfony 1.x pożyczyło wiele istniejących pomysłów, czy narzędzi z innych projektów Open Source. Symfony zawsze adoptowało najlepsze, istniejące rozwiązania, mieszało je i dodawało nieco nowych. Symfony 2 wciąż podąża tą ścieżką. Dependency Injection podpatrzono w Springu (Java). Klasy loggera i cache z symfony 1.x zastąpiono klasami Zenda. Dlaczego? Bo są lepsze :)

Kod jest już dostępny!

Podczas konferencji pierwsza publiczna wersja kodu Symfony 2 została pchnięta do repozytorium git na githubie. Możecie go ściągać i testować. Pamiętajcie tylko, że jest to wersja aktywnie rozwijana i wiele rzeczy ulegnie zmianie. Symfony 2 nie jest gotowe na produkcyjne systemy. Specjalnie po to, aby uczyć i informować o Symfony 2, uruchomiono stronę Symfony Reloaded. Na koniec zamieszczam prezentację i jej nagranie wideo z konferencji.

Jakub Zalas

Jakub Zalas

Architekt, Programista, Trener