SymfonyLive Köln 2016

alt

Vom 27.04.2016 bis zum 29.04.2016 fand in Köln die SymfonyLive statt, die neben Talks auch eine Reihe an Workshops anzubieten hatte. Neben der deutschsprachigen SymfonyLive in Köln, wird es Ende des Jahres auch eine internationale SymfonyCon in Berlin geben.

Auf dem Event hatte ich die Wahl zwischen elf verschiedenen Workshops. Meine Entscheidung fiel auf »REST Services with Symfony« und »Maintainable Doctrine ORM Applications«.

Workshop: Tag 1 – »REST Services with Symfony«

Der Workshop »REST Services with Symfony« beschäftigte sich mit der Erstellung eines REST-Service mittels Symfony-Framework. Im Workshop wurde uns die Idee hinter REST näher gebracht und es wurden uns einige Coding-Challenges gestellt, die es zu lösen galt. Zudem wurden uns neben den bestehenden Techniken einzelne Symfony-Komponenten vorgestellt, die bei der Implementierung eines Services zum Einsatz kommen können. Darüberhinaus gab es noch jede Menge weitere Themen, die sich rund um die Implementierung drehten. So zum Beispiel die Strukturierung des Codes, die Dokumentation und nicht zu vergessen die Sicherheit.

Strukturierung

Im Bereich der Strukturierung ging es um die Trennung von Persistenz und Transfer. Hier geht es primär darum, dass die Objekte, welche die Businesslogik beinhalten, nicht die Objekte sind, welche transferiert werden sollten. Generell sind nicht immer alle Daten in der REST-Schnittstelle wichtig.
Um die Menge an Daten zu filtern, sollten sogenannte Data Transfer Objects eingesetzt werden.

Dokumentation

Die Dokumentation erfolgte direkt im Quelltext. Erfahrungen haben gezeigt, dass eine Dokumentation, die an einer anderen Stelle gespeichert wird, in der Regel nicht aktuell ist und weniger gepflegt wird. Für die Dokumentation des REST-Service wurde uns hierfür das entsprechende Tool vorgestellt.

Sicherheit

Das Thema Sicherheit wurde in dem Workshop gleich von mehreren Seiten betrachtet. So wurde zum Beispiel geprüft, welche Methoden das HTTP-Protokoll bietet und uns wurden die Plugins (Symfony Guard, Oauth) vorgestellt, die für die Authentifizierung und Autorisierung notwendig sind.

Vorgestellt wurden eine Shell-Komponente httpie, die zum Testen der REST-Schnittstellen genutzt wird und das Firefox-Plugin REST Client.

Zu guter Letzt wurde noch Hypermedia thematisiert. Anbetrachts der knapper werdenden Workshop-Zeit blieb es hier aber bei einer begrifflichen Definition.

Workshop: Tag 2 - »Maintainable Doctrine ORM Applications«

Entwickler, die das Doctrine ORM bereits in ihrer Vergangenheit genutzt haben, konnten ihr Wissen in dem Workshop von Marco Pivetta noch weiter vertiefen. Die Workshop-Teilnehmer bildeten Zweierteams und sollten eine eigene Bibliothek entwickeln. In den 30-minütigen Coding-Sprints wurden dann die definierten Vorgaben umgesetzt.
In einem Live-Coding stellte Marco Pivetta dann seine mögliche Implementierung vor, griff aber auch Ideen und Anmerkungen der Teilnehmer auf.

Neben den vielen Coding-Sprints, griff Marco Pivetta auch Themen auf, die sich mit dem Software-Design beschäftigten.

Er verdeutlichte noch einmal, warum eine Trennung von Logik und Datentypen wichtig sei. Und auch er propagierte – wie schon zuvor der Workshopleiter »REST Services with Symfony« – die Trennung von Businesslogik und Persistenz. Code funktioniere auch ohne Persistenzschicht und kann auch getestet werden. Entsprechend kritisch sieht Marco Pivetta die Generierung von eindeutigen Ids durch die Datenbank. Dies erzeuge eine Abhängigkeit von Businesslogik und Persistenz.

Weiterhin forderte er, dass der Konsument sich nicht um die internen Strukturen der Businesslogik kümmern solle und somit auch keinen Einblick in diese Strukturen benötigt.
Um dennoch mit validen Daten arbeiten zu können, verwendet er ValueObjects. Diese Objekte stellten sicher, dass die gelieferten Daten den Anforderungen entsprechen oder eine entsprechende Exception auslösen.

Ein Vorteil der ValueObjects ist, dass diese gezielt mit einem Unit-Test geprüft werden können.
Wie diese mit ORM genutzt werden, verdeutlichte Marco Pivetta durch die Konfiguration der Mappings. Er wies darauf hin, dass Doctrine aktuell nur mit nativen Datentypen arbeiten kann und entsprechend eine Integrationsklasse benötigt wird.

Mein Fazit

Für die Workshops hätte ich mir noch mehr Zeit gewünscht, um das Wissen noch besser vertiefen zu können. Leider war im Vorfeld nicht klar, welche Anforderungen ein Teilnehmer erfüllen muss, um am Workshop teilnehmen zu können. Erst nachdem der Workshop startete, wurde dies deutlich.

Der erste Workshop hat mir einen Einblick in die Strukturen von Symfony und deren Komponenten ermöglicht. Allgemein konnte ich durch den Workshop mehr über REST erfahren und kann nun Themen besser bewerten. In Bezug auf die Vermittlung von Techniken bei dem Design und der Implementierung hat mir der zweite Workshop sehr gut gefallen.
An weiteren Workshops der SymfonyLive würde ich wahrscheinlich nicht wieder teilnehmen. Die entsprechenden Thematiken lassen sich auch über das Lesen der Dokumentation erarbeiten. Die Konferenz, welche am dritten Tag stattfand, scheint für einige Besucher interessanter gewesen zu sein als die Workshops. Vielleicht schaue ich mir beim nächsten Mal also nur die Konferenz an ;-).