>  기사  >  백엔드 개발  >  디자인 패턴 관찰자: 강력한 알림 시스템

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

DDD
DDD원래의
2024-09-13 06:33:11936검색

애플리케이션 개발 중에 이벤트에 유연하게 대응할 수 있도록 애플리케이션이 필요한 경우가 많습니다. 예를 들어, 특정 작업(예: 사용자 등록)이 발생할 때 여러 시스템에 알리고 싶다고 가정해 보겠습니다. 이것이 바로 패턴 관찰자가 등장하는 곳입니다. 이 패턴을 사용하면 개체 간의 관계를 설정할 수 있으므로 한 개체의 상태가 변경되면 다른 모든 개체에도 자동으로 정보가 전달되고 업데이트됩니다.

Symfony는 프로젝트에 매우 실용적이고 강력하게 사용할 수 있는 Event Dispatcher 덕분에 이미 이 패턴을 효과적으로 구현하고 있습니다.

패턴 관찰자란 무엇입니까?

패턴 관찰자를 사용하면 관찰 대상과 한 명 이상의 관찰자 간의 관계를 정의할 수 있습니다. 관찰된 객체에 상태 변화가 발생하면 모든 관찰자가 그에 따라 반응할 수 있도록 알림을 받습니다.

작동 방식은 다음과 같습니다.

  • ? Subject(Observable): 상태를 변경하는 주요 객체입니다.
  • ? 관찰자: 관찰 가능 항목의 변화에 ​​반응하는 객체입니다.

사용자가 등록할 수 있는 사이트가 있다고 가정해 보겠습니다. 등록할 때마다 환영 이메일을 보내고, 사용자를 뉴스레터 목록에 추가하고, 분석 시스템에 알리고 싶습니다.

한 곳에서 모든 것을 엄격하게 코딩하는 대신 "등록된 사용자" 이벤트가 트리거되는 즉시 알림을 받게 되는 여러 관찰자에게 이러한 작업을 위임할 수 있습니다.

Symfony에서 패턴 관찰자 구현

Symfony에서는 이벤트 디스패처를 사용하여 패턴 관찰자를 설정합니다. 이렇게 하면 기본 로직을 수정하지 않고도 코드를 깔끔하게 정리하고 확장 가능하게 만들 수 있습니다.

1️⃣단계: 이벤트 선언

사용자가 등록할 때 전달되는 이벤트를 만드는 것부터 시작하겠습니다. 후자에는 사용자 정보가 포함됩니다.

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

2️⃣단계: 이벤트 전달

이제 컨트롤러나 서비스에서 사용자가 등록할 때 이 이벤트를 전달합니다.

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

3️⃣ 단계: 관찰자(리스너) 생성

다음으로 등록 이벤트가 전달될 때마다 호출되는 관찰자를 생성해야 합니다. 여기에 이메일을 보내고 사용자를 뉴스레터 목록에 추가하는 예가 있습니다.

관찰자 1: 환영 이메일 보내기

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

감시자 2: 뉴스레터 목록에 사용자 추가

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

4️⃣단계: 관찰자 구성

이제 user.registered 이벤트를 수신할 수 있도록 구성에 리스너를 등록해야 합니다.

config/services.yaml에서 관찰자를 서비스로 추가합니다.

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

ℹ️ Symfony 버전 5.3부터 PHP 속성을 사용하여 서비스 및 이벤트 리스너를 구성할 수 있습니다. 이는 services.yaml 파일을 사용하는 대신 클래스에서 직접 이벤트를 선언할 수 있는 보다 현대적인 접근 방식입니다.
따라서 리스너 메소드에서 직접 #[AsEventListener] 속성을 사용할 수 있습니다.

속성을 사용하여 두 관찰자를 조정하는 방법을 보여드리겠습니다(그러면 config/services.yaml에 특별한 구성이 필요하지 않습니까? :

관찰자 1

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

관찰자 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.