Développement Laravel : Comment implémenter des applications basées sur les événements à l'aide de Laravel Event Sourcing ?
Avec le développement de la technologie du cloud computing et l'expansion continue des scénarios d'application, les applications événementielles sont devenues une approche architecturale de plus en plus importante, en particulier dans les grands systèmes distribués. Laravel Event Sourcing est un cadre pour implémenter des applications basées sur des événements. Cet article explique comment utiliser Laravel Event Sourcing pour créer des applications basées sur des événements.
1. Qu'est-ce que le sourcing d'événements Laravel ?
Laravel Event Sourcing est une extension Laravel basée sur une architecture basée sur les événements et CQRS (Command Query Responsibility Separation), qui peut nous aider à mettre en œuvre rapidement des applications basées sur des événements.
En termes simples, Laravel Event Sourcing convertit toutes les opérations commerciales en événements et conserve ces événements dans le stockage d'événements. Lorsque nous avons besoin d'obtenir des données, il nous suffit de les reconstruire en fonction de l'événement pour obtenir l'état actuel.
2. Avantages de Laravel Event Sourcing
Laravel Event Sourcing convertit les opérations commerciales en événements, afin que de nouvelles opérations et fonctions commerciales puissent être facilement ajoutées sans modifier le code d'origine.
Étant donné que tous les événements sont persistants, lorsque le système tombe en panne, nous pouvons reconstruire le système en fonction des événements pour garantir la fiabilité de l'application.
Laravel Event Sourcing utilise des files d'attente d'événements, qui peuvent réaliser un traitement asynchrone des événements et améliorer les performances en temps réel du système.
3. Utilisez Laravel Event Sourcing pour créer des applications basées sur des événements
Nous pouvons utiliser Composer pour installer Laravel Event Sourcing :
composer nécessite spatie/laravel-event-sourcing
Nous devons définir tous les événements dans l'application. Par exemple, nous devons créer un événement enregistré par un utilisateur :
class UserRegistered { public string $userId; public string $name; public string $email; public function __construct(string $userId, string $name, string $email) { $this->userId = $userId; $this->name = $name; $this->email = $email; } }
Nous devons créer un gestionnaire d'événements responsable de la gestion de tous les événements. Par exemple, nous devons créer un gestionnaire d'événements qui gère les événements d'enregistrement des utilisateurs :
class UserRegisteredEventHandler { public function __invoke(UserRegistered $event) { User::create([ 'id' => $event->userId, 'name' => $event->name, 'email' => $event->email, ]); } }
Une racine agrégée est la partie centrale d'une application pilotée par événements, elle représente une certaine entité dans l'application. Nous devons définir la racine agrégée et implémenter les changements d’état de la racine agrégée. Par exemple, nous devons créer une racine d'agrégation d'utilisateurs :
class UserAggregateRoot extends AggregateRoot { public function register(string $userId, string $name, string $email) { $this->recordThat(new UserRegistered($userId, $name, $email)); } protected function applyUserRegistered(UserRegistered $event) { // 用户注册的状态变化 } }
Dans notre code métier, nous pouvons déclencher des événements directement, par exemple :
$userAggregateRoot = new UserAggregateRoot(); $userAggregateRoot->register('123', 'Tom', 'tom@example.com');
Lorsque le système tombe en panne, nous Le système peut être reconstruit simplement en rejouant tous les événements. Par exemple, nous pouvons utiliser le code suivant pour reconstruire le système :
class UserRepository { public function getById(string $userId): User { $user = new User(); $userAggregateRoot = new UserAggregateRoot(); $eventStream = event()->getStreamById($userId); foreach ($eventStream as $event) { $userAggregateRoot->replay([$event]); $user = $userAggregateRoot->get(); } return $user; } }
C'est tout pour créer une application basée sur les événements à l'aide de Laravel Event Sourcing. En convertissant toutes les opérations commerciales en événements et en les conservant, nous pouvons très bien implémenter des applications basées sur les événements.
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!