Warum Symfony?

Mittwoch, 25. Mai 2011 um 13:04 von in Webentwicklung
Im Auftrag von Webmasters Europe e.V. haben Marco und ich das Detailkonzept für das Curriculum des Web Development Grade 2-Moduls entwickelt, das fortgeschrittene Themen wie objektorientierte Programmierung, AJAX und auch Frameworks umfasst.
In diesem Blogbeitrag berichte ich über diese Entwicklungsarbeit und erläutere unsere Entscheidungen.
Was genau ist ein Framework? Zumindest einige von euch werden den Begriff wohl noch nicht gehört haben. Ein Framework ist eine Art Aufsatz auf die eigentlich zugrunde liegende Programmiersprache und liefert eine Menge zusätzlicher Funktionen, die wir ansonsten in jedem Projekt von Hand schreiben müssten.
Jeder, der schon einmal Funktionen aus einem alten Projekt kopiert hat, um sie in einem neu angelegten gleich wieder zur Verfügung zu haben, hat im Prinzip schon ein eigenes, kleines Framework geschaffen. Umgangssprachlich könnte man ein Framework also als "Dinge, die man sowieso jedes Mal wieder braucht" bezeichnen.
Wir werden im Developer 2 sowohl für PHP als auch für JavaScript ein Framework einsetzen, um euch bei der Programmierung zu unterstützen. Auf Seiten von JavaScript war die Entscheidung, welches Framework wir einsetzen sollten, sehr leicht. jQuery hat alle Konkurrenten mit viel Abstand hinter sich gelassen und steht heute auf seinem Anwendungsgebiet quasi ohne Konkurrenz da. Für spezielle Anwendungsgebiete gibt es zwar andere Frameworks, z.B. ExtJS für die Entwicklung komplexer Oberflächen, aber im Bereich Allzweckframework ist jQuery aktuell uneinholbar an der Spitze.
Bei PHP sieht die Sache schon etwas anders aus. Dort gibt es in etwa so viele Frameworks wie Entwickler. OK, der Vergleich war ein wenig übertrieben, aber es gibt wirklich sehr viele Frameworks für PHP. Einen groben Überblick gibt es z.B. unter http://www.phpframeworks.com/, wobei mir selbst aus dem Gedächtnis noch mehere Produkte einfallen (Alloy, Qcodo, Kohana, Silex, Limonade ...), die nicht in dieser Liste stehen. Daher war es auch nicht ganz so leicht, einen geeigneten Kandidaten für unseren Lehrgang auszusuchen.
Nach längerer Recherche und vielen (vielen) Diskussionen haben wir uns für Symfony 2 entschieden. Im restlichen Beitrag möchte ich die Gründe für unsere Entscheidung erklären.
Verbreitung
Es sollte auf jeden Fall ein Framework mit einem hohen Marktanteil sein. Es gibt im PHP-Bereich viele sehr innovative, wirklich interessante Frameworks - die von etwa einem Dutzend Programmierern verwendet werden. Wir haben uns zum Beispiel angesehen, wie oft (oder ob überhaupt) die Namen der Frameworks in Stellenanzeigen auftauchen (dazu hatte Webmasters Europe eine Arbeitsmarkanalyse durchgeführt), ob es gedruckte Bücher gibt oder wie umfangreich die Community ist.
Nach diesem Kriterium hatten wir die Liste der Kandidaten auf
- Zend Framework
- Symfony
- CakePHP
- CodeIgniter
- Yii
eingeschränkt.
Modernität
PHP 5 wurde 2004 veröffentlicht, die Weiterentwicklung von PHP 4 inklusive dem Schließen von Sicherheitslücken wurde 2008 eingestellt. Heutzutage noch PHP 4 einzusetzen ist keine gute Idee - vorsichtig ausgedrückt:
- Man verpasst die Weiterentwicklungen und neuen Funktionen, die seit PHP 5 Einzug in die Sprache gehalten haben. Im Prinzip programmiert man also wie vor 7 Jahren, was im Bereich der Webtechnologien eine lange Zeit ist.
- PHP 4 ist tot, offiziell von den Erfindern zu Grabe getragen! Sie raten allen davon ab, diese alten Versionen von PHP noch in irgendeiner Form zu verwenden.
Aus diesen Gründen haben wir alle Frameworks ausgeschlossen, die noch Unterstützung für PHP 4 bieten. Damit flogen
- CakePHP
- CodeIgniter
aus unserer Liste. Wir wollen moderne Webentwicklung vermitteln und nicht mit Antiquitäten handeln!
Dokumentation
Der Umfang und die Qualität der verfügbaren Dokumentation ist ebenfalls ein wichtiges Kriterium. Alle verbleibenden Kandidaten haben ausreichend Dokumentation online, wobei Yii hier den letzten Platz einnimmt. Symfony, mit 4 kostenlos erhältlichen Büchern (als PDF) und einer Menge weiterer Quellen, belegt hier mit Abstand den ersten Platz.
Arbeitsweise
Als letzten Schritt haben wir uns die Frameworks vorgenommen, und kleine Beispielanwendungen erstellt, wobei wir uns an den Einstiegstutorials auf den jeweiligen Webseiten orientiert haben. Wir gingen also die Schritte von der Installation des Frameworks, die Konfiguration, Aufsetzen des Projekts, Datenbankanbindung, Erstellen von Modellen bis zum Entwickeln eines einfachen CRUD-Interfaces.
Dabei ist uns vor allem das Zend Framework sehr negativ aufgefallen. Ein Framework sollte den Entwickler unterstützen und ihm (ihr) Arbeit abnehmen. Stattdessen fanden wir uns dabei, einen ORM basierend auf Zend selbst zusammenzustellen, ein eigenes Migrationskonzept mit selbstgeschriebenem SQL für die Datenbank zu entwickeln und eine Menge Konfiguration zu schreiben.
Diesen Effekt hatten wir bei den anderen Frameworks nicht. Der Einstieg bis zur ersten lauffähigen Anwendung ging wesentlich schneller und reibungsloser vonstatten. Der Grund liegt in der Struktur des Zend Framework. Es ist eher als eine lose Sammlung von PHP-Komponenten ausgelegt, als als ein einheitliches Framework. Damit bietet es zwar die maximale Flexibilität beim Entwickeln, dafür aber auch mehr Aufwand und weniger Komfort als die Konkurrenz.
Einen guten Vergleich bietet das Thema "Modelle und Datenbank anlegen". Wenn ihr wollt, vergleicht mal die Länge (und die zu schreibende Codemenge) in den beiden Einsteigertutorials von Zend und Symfony und urteilt danach selbst:
- Zend: http://framework.zend.com/manual/en/learning.quickstart.create-model.html
- Symfony (noch Version 1): http://www.symfony-project.org/jobeet/1_4/Doctrine/en/03
Zusammenfassung
Nachdem wir alle Kriterien zusammengetragen und alle Frameworks ausprobiert hatten, stand für uns Symfony 2 doch relativ deutlich als erste Wahl fest. Es ist mit Zend zusammen am weitesten verbreitet, hat hervorragende Dokumentation, ist hochmodern (ab PHP 5.3) und es lässt sich prima damit arbeiten. Die aktuell stabile Version 1 wollten wir nicht mehr unterrichten, da Version 2 ohnehin bald stabil wird. Anders ausgedrückt, bis wir mit allen Schulungsunterlagen fertig sind, ist Version 1 ohnehin veraltet. ;-)
So, das war's von meiner Seite aus. Ich hoffe, ich konnte euch schlüssig darlegen, warum wir von nun an Symfony unterrichten werden und freue mich auf Feedback von euch. Habt ihr andere Erfahrungen mit PHP-Frameworks gemacht, was ist euer Liebling?
Vielleicht sehen wir uns ja im Web Developer Grade 2-Lehrgang?
Gruß
Marc
Tags: JavaScript , PHP , Symfony , jQuery
Kommentare
-
Frank Brückner
am Donnerstag, 26. Mai 2011, 12:01
-
Marc Remolt
Stimmt, das Tutorial von Rob Allen hat mir schon zu pre ZF 1.0-Zeiten den Einstieg erleichtert.
Ganz nebenbei, von ihm stammt auch eines der besten Bücher zum ZF (Zend Framework in Action). Es ist zwar leider inzwischen nicht mehr ganz taufrisch, hat aber immer noch einen festen Platz in meinem Bücherregal.
Trotzdem, wenn ich mir den Workflow der beiden Frameworks ansehe, dann entspricht Symfony zumindest meiner Arbeitsweise mehr.
Dinge wie richtige Datenbank-Migrationen, ein fertiges, funktionierendes ORM (Doctrine2, das wohl genialste Stück PHP-Software auf diesem Planeten IMHO), eine eingebaute Debug-Konsole in der Webseite oder auch der deutlich geringere Konfigurationsaufwand sind zumindest für mich (einen sehr faulen Programmierer) sehr starke Argumente für Symfony.
Aber die Geschmäcker sind nun mal sehr verschieden. Ich sehe durchaus die Stärken von ZF, vor allem die deutlich höhere Flexibilität. Allerdings hat genau dieser Punkt für mich den Ausschlag gegen ZF im Lehrgang gegeben.
Je mehr man konfigurieren kann/muss, je mehr werden die Teilnehmer des Lehrgangs auch ausprobieren oder sich schlicht und ergreifend vertippen. Als Dozent muss man das dann die Fehler suchen, was unnötig Zeit kostet. Ich denke, Symfony lässt sich einfacher im Unterricht verwenden.
Viele Grüße
Marc
am Donnerstag, 26. Mai 2011, 12:19
-
Frank Brückner
Natürlich stimme ich Ihnen zu, dass das Zend Framework viel dem Programmierer selbst überlässt und das Thema Datenmodell nicht vorgibt.
Ähnlich wie bei Zeta Components (ehemals eZ Components) wird versucht das Korsett nicht zu eng zu schnüren bzw. gar überhaupt eines vorzugeben.Es kommt übrigens (mit hoher Wahrscheinlichkeit) auch eine offizielle Integration von Doctrine in der Version 2 vom Zend Framework - endlich!
Und wenn wir schon bei Version 2 sind und den damit verbundenen Neuerungen und Verbesserungen, dann liegt Symfony weit vorn.Gibt es schon einen Termin zur Verfügbarkeit der Lernunterlagen?
PS: Sind nicht alle Programmierer faul? Ich bevorzuge eigentlich die Bezeichnung „intelligente Bequemlichkeit“. ;-)
am Donnerstag, 26. Mai 2011, 12:45
-
Marc Remolt
Da haben Sie vollkommen recht, jedes Framework hat seinen eigenen Fokus und damit Stärken und Schwächen. Das perfekte ist zumindest für PHP noch nicht vom Himmel gefallen, sonst gäbe es nicht so viele.
Das mit Doctrine im ZF wird wirklich langsam Zeit. Ich habs selbst mal noch mit Version 1 von Hand versucht, wirklich schön war das allerdings nicht. Aber nachdem, soweit ich weiß, mit Benjamin Eberlei (https://github.com/beberlei) ein Doctrine-Core-Entwickler an der Sache dran ist, sollte es klappen.
Ende Juli halten wir das Seminar zum ersten Mal in einer Präsenzschulung ab, bis dahin brauchen wir also verwertbare Unterlagen.
Für den Fernunterricht müssen die Unterlagen natürlich noch höheren Ansprüchen genügen (da kein Tutor zum erklären da ist, sondern nur das Lernheft). Der geplante Termin für alle vollständigen, verkaufsfähigen Lernhefte ist September. Wenn ein einzelnes Lernheft schneller fertig ist, dann natürlich früher.
Viele Grüße
MarcP.S. Um mich selbst zu zitieren: Nur ein fauler Programmierer ist ein guter Programmierer! Ihre Formulierung lässt sich allerdings besser vermarkten, vor allem bei Chefs.
am Donnerstag, 26. Mai 2011, 13:00
-
Gerald Fleischer
Ich mache gerade Webdeveloper Grade I und stehe vor dem Abschlußprojekt.
Meine Erfahrungen mit dynamischen Websites im praktischen Einsatz beschränken sich z.Z. rein auf Joomla - und hier auch nur auf das Design, das implementieren und konfigurieren von Komponenten/Modulen/Plugins. Auf die Dauer ist das jedoch unbefriedigend und führt bestenfalls zu suboptimalen Lösungen. Das ist meine Motivation, warum ich den Developer-Kurs mache.
Was ich damit sagen möchte: Meine Kenntnisse bzgl. CMS und Frameworks sind noch sehr rudimentär. Nimm mir deshalb folgende Frage nicht übel:
Auf einer Skala von 1 bis 10: Wenn Joomla auf 9 liegt (da praktisch alles vorgekaut ist und ich nur mehr für den Content sorgen muss), wo liegt dann ein Framework wie Symfony? Welche Aufgaben nimmt mir Symfony ab, für welche muss ich noch sorgen? Welche Vorteile hat Symfony gegenüber Joomla, Typo3, Drupal, Contenido etc., da ich auch bei diesen "fertigen" CMS-Systemen eigenen Code entwickeln kann?
Ich weiß, es gibt 4 gratis-PDFs über Symfony - aber nur in englisch, italienisch, japanisch...
Mit besten Grüßen, Gerald
am Mittwoch, 07. September 2011, 13:05
-
Jan
Da Marc nicht mehr für die Akademie tätig ist, übernehme ich als Teilnehmer der Präsenzschulung einmal die Antwort.
Eine Framework wie Symfony 2 ist nicht wirklich mit einem fertigen CMS vergleichbar. Bei einem CMS beschäftigt man sich normalerweise nur mit Aussehen bzw. Inhalt und programmiert maximal Kleinigkeiten, um Dinge für einen speziellen Anwendungsfall anders zu regeln.
Bei einem Framework muss man alles selbst programmieren, d.h. welche Daten aus welcher Datenbank-Tabelle sollen in welcher Form angezeigt werden. Das Framework bietet erst einmal nur fertige Lösungen an, wie man dies mit wenig Code lösen kann, man muß jedoch definitiv selbst Hand anlegen.
Allerdings gibt es für jedes Framework Erweiterungen, mit denen man durchaus mit etwas Aufwand den Stand eines fertigen CMS erreichen kann. Allerdings muss man diese Erweiterungen erstmal suchen, ausprobieren und für gut befinden, da sie nicht im normalen Lieferumfang enthalten sind.
In der Regel nehme ich beispielsweise ein fertiges CMS, sofern der Kunde keine besonderen Wünsche oder ein kleines Budget hat. Ein Framework ist für langfristige Projekte, die ständig weiterentwickelt werden und genau auf die Kundenwünsche zugeschnitten werden müssen, besser geeignet, da man nach erfolgreicher Einarbeitung wesentlich schneller Code produzieren kann.
Allerdings stellt ein Framework auch ganz andere Anforderungen an die Infrastruktur, d.h. bei Symfony 2 geht relativ wenig ohne eigenen Root-Server.
Schwierigkeit
Symfony 2: 1 bis 3 (d.h. relativ schwer)
PHP mit OOP und MVC: 5 bis 6
CMS (Modul-Erstellung): 6 bis 7
PHP ohne Framework: 7 bis 8
CMS (Design/Inhalt): 9 bis 10 (relativ leicht nach kurzer Einarbeitung)am Mittwoch, 07. September 2011, 17:36
-
Marco Emrich
Herzlichen Dank Jan für die ausführliche und kompetente Antwort!
Im Grunde hab' ich der Antwort von Jan auch nicht mehr viel hinzuzufügen. Ein CMS und ein Framework arbeiten auf einer völlig anderen Ebene. Um Jan's Aussage nochmal zu verdeutlichen:
Zu Beginn eines Projektes entscheidet sich der Verantwortliche für den Einsatz einer bestimmten Technologie (oder auch mehrere). Diese Entscheidung ist Projekt-abhängig und hängt von vielen projektspezifischen Kriterien ab (und natürlich ist sie noch von weiteren Dingen abhängig: Kunde, Deployment-Umgebung, Entwicklern, etc.).
Die Entscheidung zwischen Framework und CMS oder anderen Alternativen ist eine Grundlegende. Ich würde die Entscheidung normalerweise immer zuerst treffen und mich erst danach für ein konkretes CMS oder Framework entscheiden.
Wie Jan schon erklärt, gib es folgenden wesentlichen Unterschied:
Framework: erlaubt es dem Kunden die Features exakt nach Anforderung zu liefern. Der Kunde bekommt genau was er sich wünscht!
CMS: Es werden Features aus fertigen Modulen konfiguriert und zusammengesteckt. Wünscht sich der Kunde nur Standardfunktionalität ist das in Ordnung. Spezialanforderungen werden aber schnell recht teuer oder sind schlicht weg nicht realisierbar.
Der Vorteil des CMS Systems ist aber, das man die Standardfunktionalität bereits "Out-of-the-Box" bekommt und daher nicht programmieren muss - eine erhebliche Kostenersparnis.
Es ist also erst die Frage zu klären, wie speziell die Anforderungen des Kunden sind und ob sie mit einem CMS abgedeckt werden können.
An dieser Stelle ist meine Erfahrung aber leider die, dass die meisten Kunden sich Aufgrund der Kostenersparnis und der kürzeren Entwicklungszeit eher ein Standard-CMS wünschen ... dann aber nach einiger Zeit feststellen (meist schon während der Entwicklung), dass Ihre Anforderung doch vieeeel spezieller sind, als sie dachten. Genau genommen ist uns das sogar schon selbst passiert (internes Projekt ohne externen Kunden) - und das, obwohl wir die Technologien recht gut kannten. Der Teufel liegt meist im Detail.
Deswegen rate ich mittlerweile in den meisten Fällen eher zu einem Framework - und nur dann zu einem CMS, wenn wirklich recht deutlich abzusehen ist, dass der Kunde mit Standardfunktionalität auskommt.
Über die Qualität von Symfony 2 kann ich nicht soviel sagen, da ich persönlich es noch nicht so gut kenne. Das kann Jan sehr viel besser beurteilen.
Es ist aber vielleicht gut zu wissen, dass es in vielen Punkten "Ruby on Rails" nachempfunden ist - dem Framework das als Spitzenreiter unter den Webframeworks gilt (und in mit wir z.B. auch dieses Portal entwickelt haben :).Ein Schwierigkeits-Skala halte ich dagegen für unangebracht, da Schwierigkeit immer vom konkreten Problem und den Fähigkeiten des Einzelnen abhängig ist. So ist das Entwickeln einer komplexen Webanwendung mit Standard-PHP natürlich viel schwieriger als mit einem geeigneten Framework.
viele Grüße,
Marcoam Donnerstag, 08. September 2011, 03:08
-
Meister Lampe
Bemerkenswert, dass jQuery eurer Meinung nach die Konkurrenz längst abgehängt hat, dabei macht es nichts besser als Mootools, Dojo, Prototype & Co. Mir ist es ein Rätsel, warum ausgerechnet ein Framework mit so vielen Inkonsistenzen und Schwächen in der API so gepusht wird. :(
am Montag, 27. Mai 2013, 23:37
Erstmal Danke für diesen Beitrag, der doch etwas mehr Aufschluss bringt.
Ich möchte an der Stelle auf ein anderes gutes Einstiegs-Tutorial zum Zend Farmework verweisen, welches viel besser (eine mögliche) Arbeitsweise des Zend Frameworks demonstriert.
„Tutorial: Getting Started with Zend Framework“ von Rob Allen
http://akrabat.com/zend-framework-tutorial/
Das „Quick Start“-Tutorial von der offiziellen Website kann da bei weitem nicht mithalten und liefert leider ein völlig falschen Eindruck vom Framework selbst.