디자인 패턴 관찰자: 강력한 알림 시스템

DDD
풀어 주다: 2024-09-13 06:33:11
원래의
861명이 탐색했습니다.

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

약간의 설명

  • #[AsEventListener] 속성은 메소드가 특정 이벤트에 대한 리스너임을 나타냅니다.
  • 속성의 첫 번째 인수는 관찰자가 수신하는 이벤트의 이름입니다(UserRegisteredEvent::NAME).
  • 마지막으로 method 매개변수는 이벤트가 트리거될 때 실행될 클래스의 메소드(여기서는 onUserRegistered)를 지정합니다. ?

5️⃣단계: 구현 테스트

RegistrationController에 사용자를 등록하면 이벤트가 전달되고 Symfony는 자동으로 해당 관찰자를 호출합니다. 이메일이 전송되고 이러한 작업/로직이 비즈니스 코드와 혼합되지 않고 사용자가 뉴스레터 목록에 추가됩니다.

패턴 관찰자를 사용하는 이유는 무엇입니까?

필수이니까요! 귀하의 신청서는 다음과 같습니다:

  1. 더 유연해진: 메인 코드를 건드리지 않고도 관찰자를 추가하거나 수정할 수 있습니다. 청취자를 추가하기만 하면 됩니다!
  2. 덜 결합: 앱의 여러 부분이 밀접하게 연결되어 있지 않습니다. 예를 들어, 이메일 보내기 및 뉴스레터 추가는 등록 컨트롤러에서 직접 코딩되지 않습니다.
  3. 확장성 향상: 이 패턴을 사용하면 여러 시스템이나 서비스(알림, 분석, 전송 등)와 관련된 이벤트에 쉽게 대응할 수 있습니다.

보너스: DDD(Domain-Driven Design)와의 링크

패턴 관찰자는 이벤트가 핵심 요소(도메인 이벤트)인 DDD(도메인 중심 설계) 기반 아키텍처에서 자주 사용됩니다. 이러한 이벤트를 통해 시스템의 다양한 부분이 반응할 수 있으며, 종종 기본 도메인 외부에서도 반응할 수 있습니다. 하지만 그것은 DDD에 대한 향후 전체 기사에 대한 토론입니다!

위 내용은 디자인 패턴 관찰자: 강력한 알림 시스템의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!