J'utilise AxonFramework depuis plus d'un an sur un projet complexe développé pour une grande banque.
Les besoins étaient exigeants, les attentes des clients étaient élevées et les délais de publication étroits.
J'ai choisi AxonFramework car, au moment du lancement du projet, il s'agissait de l'implémentation la plus complète et la mieux documentée de CQRS disponible en Java, bien conçue, facile à intégrer, à tester et à étendre.
Après plus d'un an, je pense que ces considérations sont toujours valables et actuelles.
Une autre considération a guidé mon choix : je voulais que l'engagement sur un projet aussi difficile devienne une opportunité de formation pour moi et les autres membres de l'équipe.
Nous avons commencé à développer avec la version 1.0 d'AxonFramework et sommes passés à la version 1.4 au fur et à mesure de la sortie de nouvelles versions.
L'expérience de notre équipe avec le CQRS et la mise en œuvre fournie par l'AxonFramework a été absolument positive.
Il nous a fourni une manière cohérente et uniforme de développer chaque fonctionnalité, ce qui nous a guidés et nous a permis de vous mettre à l'aise.
Sans lui, certaines fonctionnalités de l'application auraient été beaucoup plus compliquées à développer. Je fais principalement référence aux divers processus à long terme qui doivent être gérés et à la logique de compensation connexe, mais aussi aux nombreux éléments de logique d'entreprise qui ont été nécessaires, ici et là, et qui se sont bien adaptés et découplés dans l'architecture orientée événements promue par CQRS.
Notre choix a été d'être conservateur dans le modèle d'écriture, donc nous avons préféré une persistance basée sur JPA au lieu d'une persistance basée sur les événements.
Le modèle de requête est composé de vues. Nous avons essayé de faire en sorte que chaque vue contienne toutes les données requises à partir d'une seule page, en utilisant des vues intermédiaires si nécessaire.
Quoi qu'il en soit, nous avons développé le modèle d'écriture alors que nous appliquions le sourcing d'événements, de sorte que nous nous occupons de modifier l'état des agrégats exclusivement par le biais d'événements. Lorsque le client a demandé une fonction de clonage d'un agrégat très complexe, il s'agissait simplement de rejouer les événements sources (avec traduction de l'uuid) vers une toute nouvelle instance - le revers de la médaille dans ce cas a été l'upcasting des événements (mais cette fonctionnalité a été grandement améliorée dans la version 2.0 imminente).
Comme dans chaque projet, nous avons trouvé de nombreux bogues au cours du développement, principalement dans notre code, mais aussi dans des composants censés être matures et stables, comme le serveur d'application, le conteneur IoC, le cache, le moteur de flux de travail et certaines des autres bibliothèques que l'on trouve facilement dans toute grande application J2EE.
Comme tout autre produit humain, AxonFramework n'était pas non plus à l'abri des bogues, mais étonnamment, pour un projet jeune et de niche comme celui-ci, ils ont été peu nombreux, non critiques et rapidement résolus par les nouvelles versions.
Le soutien aimable et immédiat fourni par l'auteur sur la liste de diffusion est une autre caractéristique inestimable et m'a beaucoup aidé lorsque j'étais en difficulté.
L'application a été mise en production il y a un an et fait actuellement l'objet d'une maintenance et d'un développement actif de nouvelles fonctionnalités.
Le client est satisfait et en redemande.
La question est plutôt de savoir quand utiliser AxonFramework et quand utiliser CQRS. Pour y répondre, il vaut la peine de se reporter à la documentation officielle : http://www.axonframework.org/docs/1.4/introduction.html#d4e51
Dans notre cas, cela en valait définitivement la peine.