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
use BroadwayEventStoreEventStore; use BroadwayEventSourcingEventSourcingRepository; class TaskEventStore extends EventSourcingRepository { public function __construct(EventStore $eventStore) { parent::__construct( $eventStore, new TaskAggregateRootEventSourcedFactory(), new TaskAggregateRootEventSourcedRepository() ); } }
$eventStore = $this->app->make(TaskEventStore::class); $eventStream = new DomainEventStream([$event]); $aggregateRoot = $eventStore->load($command->taskId); $aggregateRoot->handle($event); $eventStore->save( $aggregateRoot->getUncommittedEvents(), $aggregateRoot->getId() );
$this->app->singleton(TaskEventStore::class, function ($app) { $eventStore = new InMemoryEventStore; return new TaskEventStore($eventStore); });
php artisan make:command ShowTasks
public function handle() { $tasks = Task::all(); foreach ($tasks as $task) { $this->info("Name: {$task->name}"); } }
php artisan make:event TaskCompleted
php artisan make:listener CompleteTaskHandler --event=TaskCompleted
protected $listen = [ TaskCreated::class => [ CreateTaskListener::class, ], TaskCompleted::class => [ CompleteTaskHandler::class, ], ];
public function handle(TaskCompleted $event) { $task = Task::where('name', $event->name)->firstOrFail(); $task->completed = true; $task->save(); }
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!