Le Design Pattern Observer : un système de notification puissant

DDD
Libérer: 2024-09-13 06:33:11
original
861 Les gens l'ont consulté

Dans le développement de tes applications, tu auras souvent besoin que ton application puisse réagir à des événements de manière flexible. Par exemple, imaginons que tu souhaites notifier plusieurs systèmes lorsque certaines actions se produisent (comme l'inscription d'un utilisateur). C'est là que le Pattern Observer entre en jeu. Ce pattern te permet d'établir une relation entre des objets, afin que lorsque l'état de l'un change, tous les autres soient automatiquement informés et mis à jour.

Symfony implémente déjà efficacement ce pattern grâce à l'Event Dispatcher, ce qui le rend bien pratique et puissant à utiliser dans tes projets.

Qu'est-ce que le Pattern Observer ?

Le Pattern Observer permet de définir une relation entre le sujet observé et un ou plusieurs observateurs. Lorsqu'un changement d'état survient sur l'objet observé, tous les observateurs sont notifiés pour qu'ils puissent réagir en conséquence.

Voilà comment ça fonctionne :

  • ? Sujet (Observable) : L'objet principal qui change d'état.
  • ? Observateurs (Observers) : Les objets qui réagissent aux changements de l'observable.

Exemple

Imaginons que tu as un site où un utilisateur peut s'inscrire. À chaque inscription, tu veux envoyer un email de bienvenue, ajouter l'utilisateur à une liste de newsletters et informer un système d'analytics.

Plutôt que de tout coder de manière rigide au même endroit, tu peux déléguer ces tâches à différents observateurs qui seront informés dès que l'événement "utilisateur inscrit" est déclenché.

Implémentation du Pattern Observer dans Symfony

Dans Symfony, tu vas utiliser l'Event Dispatcher pour mettre en place le Pattern Observer. Ca va te permettre d'organiser le code proprement et de le rendre extensible sans modification de la logique de base.

Étape 1️⃣ : Déclarer l'Événement

On va commencer par créer un événement qui sera dispatché lorsqu'un utilisateur s'inscrit. Ce dernier contiendra les informations de l'utilisateur.

Le Design Pattern Observer : un système de notification puissant

Étape 2️⃣ : Dispatcher l'Événement

Maintenant, dans ton contrôleur ou service, tu vas dispatch cet événement quand un utilisateur s'inscrit.

Le Design Pattern Observer : un système de notification puissant

Étape 3️⃣ : Créer des Observateurs (Listeners)

Ensuite, tu vas devoir créer les observateurs, qui seront appelés à chaque fois que l'événement d'inscription est dispatché. Ici, tu as l'exemple où on envoie un email et on ajoute l'utilisateur à une liste de newsletters.

Observateur 1 : Envoyer un email de bienvenue

Le Design Pattern Observer : un système de notification puissant

Observateur 2 : Ajouter l'utilisateur à une liste de newsletters

Le Design Pattern Observer : un système de notification puissant

Étape 4️⃣ : Configuration des Observateurs

Tu dois maintenant enregistrer les listeners dans la configuration pour qu’ils écoutent l’événement user.registered.

Dans config/services.yaml, il faut ajouter les observateurs comme services :

Le Design Pattern Observer : un système de notification puissant

ℹ️ Depuis la version 5.3 de Symfony, tu peux utiliser des attributs PHP pour configurer les services et les écouteurs d'événements (event listeners). C'est une approche plus moderne qui te permet de déclarer les événements directement dans les classes, au lieu d’utiliser le fichier services.yaml.
Tu peux donc utiliser l'attribut #[AsEventListener] directement sur la méthode de ton listener.

Je vais te montrer comment adapter les deux observateurs avec des attributs (donc plus besoin de config particulière dans config/services.yaml ? :

Observateur 1

Le Design Pattern Observer : un système de notification puissant

Observateur 2

Le Design Pattern Observer : un système de notification puissant

Little explanation

  • The #[AsEventListener] attribute indicates that the method is a listener for a specific event.
  • The first argument of the attribute is the name of the event that the observer is listening for (UserRegisteredEvent::NAME).
  • And finally, the method parameter specifies the method of the class that will be executed when the event is triggered (in our case, onUserRegistered). ?

Step 5️⃣: Test the implementation

When you register a user with the RegistrationController, the event is dispatched and Symfony automatically calls the corresponding observers. The email is sent, and the user is added to the newsletter list without these actions/logic being mixed with your business code.

Why Use the Pattern Observer?

Because it's an essential! It will allow your application to be:

  1. More flexible: you can add or modify observers without touching your main code. Just add a listener!
  2. Less coupled: the different parts of your app are not closely linked. For example, sending emails and adding to the newsletter are not coded directly in the registration controller.
  3. More scalable: this pattern makes it easy to react to events that could involve several systems or services (notifications, analytics, sending, etc.).

Bonus: The link with DDD (Domain-Driven Design)

The Pattern Observer often finds its place in architectures based on DDD (Domain-Driven Design), where events are key elements (Domain Events). These events allow different parts of the system to react, often outside the main domain. But that’s a discussion for a future full article on DDD!

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!