Archives du mot-clé Doctrine2

Suite du test de Broadway

La dernière fois, je me suis contenté de mettre en place l’EventStore. Cette fois, il y aura également le ReadModel.

La meilleure méthode est de configurer Saga et le ReadModel de  Broadway avec la valeur « in_memory ». Cela vous laisse toute latitude pour la réalisation de votre ReadModel.

La dernière version de mon exemple ajoute à l’application la partie sécurité. Chaque évènement sera enrichi par l’utilisateur l’ayant commandé.

Pour cela, il a valu mettre en place un MetadataEnricher.

Il est bien évident que vous pouvez réaliser beaucoup de choses avec cette librairie. N’hésitez pas non plus à réaliser un fork (fourche) pour proposer vos améliorations.

Je remercie la société Qualitate.com d’avoir ouvert le code source de sa librairie.

 

Bonus: Un deuxième exemple d’utilisation de la librairie : https://github.com/macintoshplus/school-cqrs-php/tree/broadway

Premier test de Broadway

Même si le nom est peu évocateur d’informatique, le propos est centré sur la mise en œuvre de DDD et des patrons CQRS et EventSourcing.

Vous comptiez que je parle de l’avenue de New York? Certains en parleraient bien mieux que moi.

Cela fait maintenant quelques mois que je me documente sur le Domain Driven Design (développement piloté par le domaine). Dès le début, j’ai été enchanté par la simplicité qu’apporte le langage omniprésent dans le dialogue avec les experts métiers. Les deux parties utilisent les mêmes termes pour désigner la même chose. Pas de transposition, pas de terme technique très obscur pour l’expert métier.

Puis le CQRS est venu avec. Il devient très vite évident tout comme l’utilité de l’EventSourcing. Après plusieurs présentations, lectures (en anglais la plupart du temps), exemples, il fallait commencer la mise en oeuvre.

Mais voilà, je travaille en PHP et la plus grande partie des exemples sont écrits en « .net » et l’un des nombreux langages de Microsoft. Que faire ? Passer au langage de Microsoft ? Ce n’est pas envisageable au travail, et à la maison je suis sur Mac. Il faut trouver des exemples en PHP ou écrire depuis zéro.

Après quelques recherches, j’ai trouvé la librairie lite-cqrs. J’ai passé beaucoup de temps à essayer de comprendre son fonctionnement. Après un fork, beaucoup de modifications et quelques heures de travail, le résultat ne me convenait pas. Il me fallait autre chose de plus consistant.

Puis, au détour d’une question posée sur un réseau social, je découvre la librairie PHP nommée Broadway.

Seulement voilà, Broadway utilise Doctrine/DBAL pour l’EventStore, ElasticSearch pour le ReadModel et Mongo dB pour Saga.

Mes usages seraient plutôt vers un EventStore et un ReadModel dans deux bases de données distinctes.

Mais, avant de tenter l’ajout d’un ReadModel en base de données, j’ai souhaité essayer la mise en place de l’EventSourcing.

Dans mon test, j’ai un agrégat, un command handler (celui qui gère l’exécution des commandes), une commande et un évent.

Après quelques changements dans la configuration de mon application Symfony 2, tout a fonctionné du premier coup!!!

La prochaine fois, je vous parlerai de l’ajout du ReadModel utilisant Doctrine.