Développement Laravel : Comment créer des applications basées sur des événements à l'aide de Laravel Event Sourcing ?
Une application basée sur les événements est une application qui utilise des événements et des gestionnaires d'événements (Event Handler) pour l'implémenter. Une architecture basée sur les événements rend les applications plus faciles à développer et à maintenir, plus flexibles et plus faciles à adapter aux changements.
Laravel est un framework PHP populaire qui fournit une fonctionnalité appelée Event Sourcing qui peut nous aider à créer des applications basées sur des événements. Cet article explique comment utiliser Laravel Event Sourcing pour créer une application simple basée sur les événements.
1. Qu'est-ce que le sourcing d'événements Laravel ?
Laravel Event Sourcing est un framework de modélisation basé sur les événements, qui est une suite fournie par Laravel pour nous aider à créer des applications basées sur des événements. Il stocke et restaure les événements, nous permettant de reproduire l'état dans l'application et de revenir aux états précédents.
2. Pourquoi utiliser Laravel Event Sourcing ?
L'avantage d'utiliser Laravel Event Sourcing est qu'il peut améliorer l'évolutivité et la maintenabilité de l'application. Lorsque nous utilisons des applications basées sur des événements, il est plus facile de comprendre et de modifier différentes parties de l'application, et l'application est plus robuste.
En utilisant Laravel Event Sourcing, nous pouvons facilement implémenter plusieurs modes, notamment le mode CQRS (Command Query Responsibility Segregation) et le mode ES (Event Sourcing).
3. Comment utiliser Laravel Event Sourcing pour créer une application événementielle ?
Dans cet exemple, nous allons créer une application simple de gestion de tâches où les utilisateurs peuvent créer et effectuer des tâches.
Étape 1 : Créer une tâche
Nous pouvons montrer comment utiliser Laravel Event Sourcing en créant une tâche. Tout d’abord, nous devons créer un événement « TaskCreated » pour gérer le comportement de création d’une tâche.
php artisan make:event TaskCreated
Étape 2 : Créer un gestionnaire d'événements pour la tâche
Une fois que nous avons créé un événement, nous devons créer un gestionnaire d'événements pour gérer l'événement. Nous devons maintenant créer un gestionnaire d'événements pour gérer l'événement "TaskCreated".
php artisan make:listener CreateTaskListener --event=TaskCreated
Étape 3 : lier les événements et les gestionnaires d'événements ensemble
Maintenant, nous devons lier les événements et les gestionnaires d'événements ensemble. Nous pouvons y parvenir dans le fichier EventServiceProvider de Laravel.
protected $listen = [ TaskCreated::class => [ CreateTaskListener::class, ], ];
Étape 4 : Utiliser le gestionnaire d'événements pour gérer l'événement de création de tâche
Nous pouvons maintenant utiliser notre gestionnaire d'événements pour gérer l'événement de création de tâche. Le premier gestionnaire d'événements que nous implémenterons est CreateTaskListener, qui créera réellement la nouvelle tâche.
public function handle(TaskCreated $event) { $task = new Task; $task->name = $event->name; $task->save(); }
Étape 5 : Utiliser Laravel Event Sourcing pour stocker des événements
L'utilisation de Laravel Event Sourcing nous permet de stocker et de restaurer des événements. Nous devons utiliser la bibliothèque Event Sourcing dans Laravel, telle que la bibliothèque Broadway.
Nous pouvons utiliser le fichier composer.json de Laravel pour ajouter la bibliothèque Broadway :
"require": { "broadway/broadway": "^1.0", "broadway/serializer": "^1.0", "broadway/event-store": "^1.0" }
Exécutez ensuite la commande suivante pour installer la bibliothèque Broadway :
composer install#🎜🎜 #Étape 6 : Utiliser Laravel Event SourcingMaintenant, nous pouvons utiliser Laravel Event Sourcing pour stocker des événements. Nous devons créer un magasin d'événements pour stocker et récupérer les événements. Nous pouvons l'implémenter en créant une classe appelée TaskEventStore.php dans le dossier de l'application de Laravel :
use BroadwayEventStoreEventStore; use BroadwayEventSourcingEventSourcingRepository; class TaskEventStore extends EventSourcingRepository { public function __construct(EventStore $eventStore) { parent::__construct( $eventStore, new TaskAggregateRootEventSourcedFactory(), new TaskAggregateRootEventSourcedRepository() ); } }Nous devons créer un nouveau magasin d'événements dans le constructeur de la classe TaskEventStore et utiliser EventSourcingRepository dans la bibliothèque Broadway pour stocker événements. Nous devons également définir une fabrique de racines agrégées et un référentiel racine agrégé pour gérer nos racines agrégées. Nous pouvons désormais utiliser la classe TaskEventStore pour stocker des événements. Nous pouvons ajouter le code suivant dans le gestionnaire d'événements CreateTaskListener :
$eventStore = $this->app->make(TaskEventStore::class); $eventStream = new DomainEventStream([$event]); $aggregateRoot = $eventStore->load($command->taskId); $aggregateRoot->handle($event); $eventStore->save( $aggregateRoot->getUncommittedEvents(), $aggregateRoot->getId() );Cet extrait de code récupère une instance de la classe TaskEventStore, crée un flux d'événements, charge la racine agrégée, appelle la méthode handle et enregistre le non validé. événements. Nous devons également lier la classe TaskEventStore dans la classe ServiceProvider de Laravel :
$this->app->singleton(TaskEventStore::class, function ($app) { $eventStore = new InMemoryEventStore; return new TaskEventStore($eventStore); });Étape 7 : Rechercher et afficher les tâches Maintenant, nous créons un nouveau tâche, nous pouvons montrer toutes les tâches à l'utilisateur en modifiant notre requête. Créez une commande appelée ShowTasks :
php artisan make:command ShowTasksLe premier processeur de commandes que nous allons implémenter est ShowTasks, qui renverra toutes les tâches pour l'affichage de la liste.
public function handle() { $tasks = Task::all(); foreach ($tasks as $task) { $this->info("Name: {$task->name}"); } }Étape 8 : Marquer la tâche comme terminée Maintenant, nous voulons simuler le comportement de marquage de la tâche comme terminée. Nous pouvons utiliser un événement « TaskCompleted » pour suivre ce comportement. Tout d'abord, nous devons créer un événement "TaskCompleted":
php artisan make:event TaskCompletedEnsuite, nous créerons un gestionnaire d'événements nommé CompleteTaskHandler pour gérer cet événement.
php artisan make:listener CompleteTaskHandler --event=TaskCompletedEnsuite, nous lions l'événement "TaskCompleted" et le gestionnaire d'événements CompleteTaskHandler :
protected $listen = [ TaskCreated::class => [ CreateTaskListener::class, ], TaskCompleted::class => [ CompleteTaskHandler::class, ], ];Enfin, le deuxième gestionnaire d'événements que nous souhaitons implémenter est CompleteTaskHandler, qui définira le statut de la tâche sur Terminé.
public function handle(TaskCompleted $event) { $task = Task::where('name', $event->name)->firstOrFail(); $task->completed = true; $task->save(); }À ce stade, nous avons réussi à créer une application événementielle où les utilisateurs peuvent créer, compléter et afficher des listes de tâches. CONCLUSION
L'utilisation de Laravel Event Sourcing peut nous aider à créer des applications basées sur les événements. Les applications basées sur les événements sont plus évolutives, plus faciles à maintenir et plus flexibles. Avec Laravel Event Sourcing, nous pouvons facilement implémenter plusieurs modèles, y compris les modèles CQRS et ES, nous recommandons donc aux développeurs d'utiliser une architecture basée sur les événements lors de la création d'applications.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!