BT

Construire une application réactive basée sur DDD et CQRS avec Akka

par Jan Stenberg , traduit par Julien Delhomme le 30 juil. 2014 |

L'objectif du Domain-Driven Design est de décomposer un domaine métier complexe en éléments faciles à manipuler, en prenant en compte les besoins de scalabilité et de cohérence. Combiné à CQRS, il est possible de construire des plate-formes applicatives s'appuyant sur des concepts comme les Bounded Contexts, les périmètres transactionnels et les communications à base d'événements. Pawel Kaczor a initié une série d'articles en trois parties décrivant la construction d'une application réactive utilisant ces concepts avec Akka, la plate-forme open-source pour applications pilotées par les événements.

Pawel, qui est un consultant impliqué dans CQRS et Scala, affirme que la cohérence garantie par des transactions globales est un besoin artificiel, qui ne correspond à aucune exigence réelle même dans le cadre de systèmes d'entreprise. Pour bénéficier pleinement d'une architecture DDD/CQRS, il suggère certaines technologies sur lesquelles s'appuyer : des bases NoSQL pour le stockage et Akka, dans le cas où l'on se trouve en environnement JVM. Un module de persistance récemment publié permet d'assurer la persistance des processus, ce qui, pour Pawel, permet de considérer Akka comme une plate-forme de construction d'applications d'entreprise.

L'exemple que donne Pawel commence par la construction de la racine d'un agrégat (Aggregate Root) utilisant l'Envent Sourcing avec Akka. Un Aggregate Root devrait être modélisé comme un acteur Stateful qui, de façon asynchrone, accepte des commandes et produit des événements. Quand une commande est acceptée, un message d'événement représentant la réception de cette commande est produit et, une fois que la persistance de cet événement a été effectuée, un message d'acquitement est retourné puis l'événement propagé.

Dans Akka, un acteur est créé par un autre acteur, qui devient son superviseur. Ce pattern de supervision signifie que l'interaction d'un client peut être simplifiée en utilisant un unique acteur pour la création des acteurs de racines d'agrégats. Pour la fin du cycle de vie, un acteur ayant terminé son traitement et étant devenu inactif devrait demander à son parent d'être éliminé ou arrêté.

Du côté Query, Pawel implémente l'infrastructure nécessaire au travail avec les projections. Deux modules Akka sont disponibles : Akka Persistence, signalé comme étant à l'état expérimental et supportant le concept de projection, et Akka Streams, actuellement en cours de développement et implémentation du standard récemment annoncé pour le traitement de flux asynchrones sur la pate-forme JVM.

Pawel a mis les sources de son exemple à disposition sur github.

Bonjour étranger!

Vous devez créer un compte InfoQ ou cliquez sur pour déposer des commentaires. Mais il y a bien d'autres avantages à s'enregistrer.

Tirez le meilleur d'InfoQ

Donnez-nous votre avis

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet
Commentaires de la Communauté

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet

Discuter

Contenu Éducatif

Rien ne serait possible sans le soutien et la confiance de nos Sponsors Fondateurs:

AppDynamics   CloudBees   Microsoft   Zenika
Feedback Général
Bugs
Publicité
Éditorial
InfoQ.com et tous les contenus sont copyright © 2006-2014 C4Media Inc. InfoQ.com est hébergé chez Contegix, le meilleur ISP avec lequel nous ayons travaillé.
Politique de confidentialité
BT