© saicle/Shutterstock.com
CQRS mit dem Zend Framework 2 implementieren

Alles hört auf mein Kommando


Von einem Artikel inspiriert, habe ich mich daran gemacht, CQRS mit dem Zend Framework 2 zu implementieren. Das Ergebnis des Experiments finden Sie in folgendem Artikel.

Stefan Priebsch hat in der letzten Ausgabe des PHP Magazins einen sehr interessanten Artikel über CQRS veröffentlicht, den ich jedem Entwickler nur ans Herz legen kann [1]. Ich hatte bereits Stefans Vortrag „Think big: Architecture is recursive“ auf der letztjährigen IPC in München verfolgt und fand das Thema CQRS damals schon sehr interessant [2]. Durch das Zitat „ […], wenn man denn unbedingt möchte, sogar innerhalb eines MVC-Frameworks […]“ aus besagtem Artikel fühlte ich mich herausgefordert, dass Thema CQRS auch einmal mit dem Zend Framework 2 zu implementieren.

Wir wollen uns hierbei nicht groß mit der Theorie aufhalten, sondern steigen gleich in die Implementierung ein. Wer den erwähnten Artikel noch nicht gelesen hat, sollte dies an dieser Stelle dringend nachholen. Ebenfalls wäre die Lektüre der Artikel „Vor dem Event ist nach dem Event“ [3] und „Stets zu Diensten“ [4] sehr hilfreich für das Verständnis dieses Artikels.

ZF2-Beispielanwendung

Damit Sie die Beispiele selbst nachvollziehen können, steht eine Beispielanwendung auf GitHub für Sie bereit [5]. Darin wollen wir das Backend eines Pizzaservice teilweise umsetzen, um die Prinzipien der Trennung von lesenden und schreibenden Zugriffen zu implementieren. Sie können das Projekt wie folgt klonen (bitte ggf. die Verzeichnisse anpassen) und installieren. Dabei setzen wir auch noch die Schreibrechte des Verzeichnisses /data/:

$ cd /home/devhost $ git clone https://github.com/RalfEggert/phpmagazin.cqrs $ cd phpmagazin.cqrs $ php composer.phar selfupdate $ php composer.phar install $ sudo chmod 777 -R data/

Danach richten Sie einen Virtual Host für die Adresse phpmagazin.cqrs ein. Wenn Sie nun http://phpmagazin.cqrs/ in Ihrem Browser aufrufen, sollte die Seite ungefähr wie in Abbildung 1 aussehen. Die Listings zu diesem Artikel finden Sie sowohl auf GitHub [6] als auch in diesem Repository im Verzeichnis /listings/.

eggert_cqrs_1.tif_fmt1.jpgAbb. 1: Aufruf von phpmagazin.cqrs

Das Prinzip „Command Query Responsibility Segregation“ schreibt nicht nur die Trennung der Lese- und Schreibzugriffe vor, sondern erfordert eine für die Lesezugriffe optimierte Repräsentation der Daten. Für die folgende Implementierung habe ich mich auch für eine Zweiteilung der Daten entschieden. Während die Daten für die Schreibzugriffe in einer MySQL-Datenbank vorgehalten werden, ve...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang