리포지토리와 이벤트 기반 패턴 결합

Susan Sarandon
풀어 주다: 2024-10-09 20:34:02
원래의
1040명이 탐색했습니다.

Combining Repository and Event-Driven Patterns

리포지토리 패턴과 이벤트 중심 아키텍처를 결합하여 데이터 지속성을 추상화하는 시스템에서 데이터 변경에 대한 비동기 응답을 달성할 수 있습니다. 이 조합은 외부 시스템 업데이트, 변경 사항 로깅, 알림 보내기 등 특정 작업이 데이터베이스 작업 후에 시작되어야 하는 시스템에 특히 유용합니다.

이제 두 패턴을 결합하여 예시를 만들어 보겠습니다.

단계별 구현:

1️⃣ 사용자 엔터티에 대한 저장소 정의
2️⃣ 데이터 변경 시 이벤트 발생
3️⃣ 이벤트에 비동기적으로 반응

1. 이벤트 방출 기능이 있는 사용자 저장소

이전 UserRepository 예시를 확장하여 사용자 생성과 같은 특정 작업이 발생할 때 이벤트를 발생시키겠습니다.

class EventDrivenUserRepository extends InMemoryUserRepository {
  private eventEmitter: EventEmitter;

  constructor(eventEmitter: EventEmitter) {
    super();
    this.eventEmitter = eventEmitter;
  }

  async save(user: User): Promise<void> {
    await super.save(user);
    this.eventEmitter.emit('userCreated', user); // Emit event on user creation
  }
}
로그인 후 복사

여기에서는 새 사용자가 저장될 때마다 userCreated 이벤트를 발생시키도록 InMemoryUserRepository를 확장합니다.

2. 비즈니스 로직을 처리하는 이벤트 구독자

이제 특정 이벤트를 수신하고 비동기적으로 반응하는 이벤트 구독자를 정의할 수 있습니다.

const eventEmitter = new EventEmitter();
const userRepository = new EventDrivenUserRepository(eventEmitter);

// React to the 'userCreated' event
eventEmitter.on('userCreated', (user: User) => {
  console.log(`New user created: ${user.name}`);
  // Perform additional tasks, like sending an email
});
로그인 후 복사

3. 저장소와 이벤트 중심의 실제 결합

모든 것을 하나로 모아 사용자 저장 및 이벤트에 대한 반응을 시뮬레이션해 보겠습니다.

(async () => {
  const user = { id: '2', name: 'Jane Smith', email: 'jane@example.com' };
  await userRepository.save(user);
})();
로그인 후 복사

이 시나리오에서 userRepository를 통해 새 사용자를 저장하면 userCreated 이벤트가 트리거되고 구독자는 관련 로직(예: 로깅 또는 알림 전송)을 비동기적으로 실행합니다.


리포지토리 패턴과 이벤트 기반 패턴 결합의 장점

?? 분리된 아키텍처: 저장소는 데이터 액세스만 담당하는 반면, 비즈니스 로직(알림 보내기, 외부 업데이트 처리 등)은 이벤트 리스너에 의해 처리됩니다. 이러한 관심사 분리로 인해 코드 유지 관리가 더욱 쉬워집니다.

?? 확장성: 비동기식 이벤트 처리를 통해 시스템 확장성이 향상됩니다. 핵심 저장소 로직을 변경하지 않고도 다양한 이벤트에 반응하도록 더 많은 이벤트 리스너를 쉽게 추가할 수 있습니다.

?? 유연성: 핵심 비즈니스 로직을 수정하지 않고도 이벤트 리스너를 추가하거나 제거할 수 있으므로 시스템이 더욱 유연해집니다.

예를 들어, 사용자 저장소를 변경하지 않고도 외부 서비스에 알리는 등 사용자 생성으로 인해 트리거되는 새 작업을 추가할 수 있습니다.


결론

저장소 패턴과 이벤트 기반 아키텍처가 함께 작동하여 믿을 수 없을 정도로 확장 가능하고 분리된 시스템을 만듭니다. 이벤트는 상태 변경에 대한 비동기 통신과 시스템 응답을 가능하게 하며 저장소는 데이터 액세스에 대한 추상화를 제공합니다. 이러한 패턴을 결합하면 유지 관리가 더 쉽고, 읽기 쉽고, 반응형 논리 및 실시간 업데이트를 처리할 수 있는 코드를 구축하는 데 도움이 됩니다.

이 조합은 마이크로서비스를 개발하든 모놀리식 시스템을 개발하든 상관없이 책임 분리와 비동기 처리가 중요한 정교한 분산 시스템에 특히 유용합니다.

위 내용은 리포지토리와 이벤트 기반 패턴 결합의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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