>PHP 프레임워크 >Laravel >Laravel 개발: Laravel Event Sourcing을 사용하여 이벤트 기반 애플리케이션을 구축하는 방법은 무엇입니까?

Laravel 개발: Laravel Event Sourcing을 사용하여 이벤트 기반 애플리케이션을 구축하는 방법은 무엇입니까?

王林
王林원래의
2023-06-13 12:06:501065검색

Laravel 개발: Laravel Event Sourcing을 사용하여 이벤트 기반 애플리케이션을 구축하는 방법은 무엇입니까?

이벤트 기반 애플리케이션은 이벤트 및 이벤트 핸들러(이벤트 핸들러)를 사용하여 구현된 애플리케이션입니다. 이벤트 기반 아키텍처를 사용하면 애플리케이션을 더 쉽게 확장하고 유지 관리할 수 있으며, 더 유연하고 변화에 더 쉽게 적응할 수 있습니다.

Laravel은 이벤트 기반 애플리케이션을 구축하는 데 도움이 되는 이벤트 소싱이라는 기능을 제공하는 인기 있는 PHP 프레임워크입니다. 이 글에서는 Laravel Event Sourcing을 사용하여 간단한 이벤트 기반 애플리케이션을 구축하는 방법을 소개합니다.

1. 라라벨 이벤트 소싱이란?

Laravel Event Sourcing은 이벤트 중심 애플리케이션을 구축하는 데 도움이 되도록 Laravel에서 제공하는 제품군인 이벤트 중심 모델링 프레임워크입니다. 이벤트를 저장하고 복원하여 애플리케이션에서 상태를 재현하고 이전 상태로 돌아갈 수 있습니다.

2. Laravel 이벤트 소싱을 사용하는 이유는 무엇인가요?

Laravel Event Sourcing을 사용하면 애플리케이션의 확장성과 유지 관리 가능성을 향상시킬 수 있다는 이점이 있습니다. 이벤트 기반 애플리케이션을 사용하면 애플리케이션의 다양한 부분을 이해하고 수정하기가 더 쉽고 애플리케이션이 더욱 강력해집니다.

Laravel Event Sourcing을 사용하면 CQRS(Command Query Responsibility Segregation) 모드와 ES(Event Sourcing) 모드를 포함한 여러 모드를 쉽게 구현할 수 있습니다.

3. Laravel Event Sourcing을 사용하여 이벤트 기반 애플리케이션을 구축하는 방법은 무엇입니까?

이 예에서는 사용자가 작업을 생성하고 완료할 수 있는 간단한 작업 관리 애플리케이션을 구축하겠습니다.

1단계: 작업 생성

작업 생성을 통해 Laravel Event Sourcing을 사용하는 방법을 시연할 수 있습니다. 먼저 작업 생성 동작을 처리하기 위해 "TaskCreated" 이벤트를 생성해야 합니다.

php artisan make:event TaskCreated

2단계: 작업에 대한 이벤트 핸들러 생성

이벤트를 생성한 후에는 이벤트를 처리할 이벤트 핸들러를 생성해야 합니다. 이제 "TaskCreated" 이벤트를 처리할 이벤트 핸들러를 만들어야 합니다.

php artisan make:listener CreateTaskListener --event=TaskCreated

3단계: 이벤트와 이벤트 핸들러를 함께 바인딩

이제 이벤트와 이벤트 핸들러를 함께 바인딩해야 합니다. Laravel의 EventServiceProvider 파일에서 이를 달성할 수 있습니다.

protected $listen = [
    TaskCreated::class => [
        CreateTaskListener::class,
    ],
];

4단계: 이벤트 핸들러를 사용하여 작업 생성 이벤트 처리

이제 이벤트 핸들러를 사용하여 작업 생성 이벤트를 처리할 수 있습니다. 우리가 구현할 첫 번째 이벤트 핸들러는 실제로 새 작업을 생성하는 CreateTaskListener입니다.

public function handle(TaskCreated $event)
{
    $task = new Task;
    $task->name = $event->name;
    $task->save();
}

5단계: Laravel Event Sourcing을 사용하여 이벤트 저장

Laravel Event Sourcing을 사용하면 이벤트를 저장하고 복원할 수 있습니다. Broadway 라이브러리와 같은 Laravel의 Event Sourcing 라이브러리를 사용해야 합니다.

Laravel의 Composer.json 파일을 사용하여 Broadway 라이브러리를 추가할 수 있습니다:

"require": {
    "broadway/broadway": "^1.0",
    "broadway/serializer": "^1.0",
    "broadway/event-store": "^1.0"
}

그런 다음 다음 명령을 실행하여 Broadway 라이브러리를 설치합니다:

composer install

6단계: Laravel Event Sourcing 사용

이제 Laravel Event Sourcing을 사용하여 다음을 수행할 수 있습니다. 매장 이벤트.

이벤트를 저장하고 검색하려면 이벤트 저장소를 만들어야 합니다. Laravel의 앱 폴더에 TaskEventStore.php라는 클래스를 생성하여 이를 구현할 수 있습니다:

use BroadwayEventStoreEventStore;
use BroadwayEventSourcingEventSourcingRepository;

class TaskEventStore extends EventSourcingRepository
{
    public function __construct(EventStore $eventStore)
    {
        parent::__construct(
            $eventStore,
            new TaskAggregateRootEventSourcedFactory(),
            new TaskAggregateRootEventSourcedRepository()
        );
    }
}

TaskEventStore 클래스의 생성자에서 새 이벤트 저장소를 생성하고 Broadway 라이브러리 Store 이벤트의 EventSourcingRepository를 사용해야 합니다. 또한 집계 루트를 관리하려면 집계 루트 팩토리와 집계 루트 저장소를 정의해야 합니다.

이제 TaskEventStore 클래스를 사용하여 이벤트를 저장할 수 있습니다. CreateTaskListener 이벤트 핸들러에 다음 코드를 추가할 수 있습니다.

$eventStore = $this->app->make(TaskEventStore::class);
$eventStream = new DomainEventStream([$event]);

$aggregateRoot = $eventStore->load($command->taskId);
$aggregateRoot->handle($event);

$eventStore->save(
    $aggregateRoot->getUncommittedEvents(),
    $aggregateRoot->getId()
);

이 코드 조각은 TaskEventStore 클래스의 인스턴스를 가져오고, 이벤트 스트림을 생성하고, 집계 루트를 로드하고, 핸들 메서드를 호출하고, 커밋되지 않은 이벤트를 저장합니다.

또한 Laravel의 ServiceProvider 클래스에 TaskEventStore 클래스를 바인딩해야 합니다:

$this->app->singleton(TaskEventStore::class, function ($app) {
    $eventStore = new InMemoryEventStore;
    return new TaskEventStore($eventStore);
});

7단계: 작업 찾기 및 표시

이제 새 작업을 만들었으므로 쿼리 작업을 수정하여 사용자에게 모든 작업을 표시할 수 있습니다. .

ShowTasks라는 명령을 만듭니다.

php artisan make:command ShowTasks

우리가 구현할 첫 번째 명령 프로세서는 목록 표시를 위해 모든 작업을 반환하는 ShowTasks입니다.

public function handle()
{
    $tasks = Task::all();
    foreach ($tasks as $task) {
        $this->info("Name: {$task->name}");
    }
}

8단계: 작업을 완료로 표시

이제 작업을 완료로 표시하는 동작을 시뮬레이션해 보겠습니다. "TaskCompleted" 이벤트를 사용하여 이 동작을 추적할 수 있습니다.

먼저 "TaskCompleted" 이벤트를 생성해야 합니다:

php artisan make:event TaskCompleted

그런 다음 이 이벤트를 처리하기 위해 CompleteTaskHandler라는 이벤트 핸들러를 생성합니다.

php artisan make:listener CompleteTaskHandler --event=TaskCompleted

다음으로 "TaskCompleted" 이벤트와 CompleteTaskHandler 이벤트 핸들러를 바인딩합니다.

protected $listen = [
    TaskCreated::class => [
        CreateTaskListener::class,
    ],
    TaskCompleted::class => [
        CompleteTaskHandler::class,
    ],
];

마지막으로 구현하려는 두 번째 이벤트 핸들러는 작업 상태를 Completed로 설정하는 CompleteTaskHandler입니다.

public function handle(TaskCompleted $event)
{
    $task = Task::where('name', $event->name)->firstOrFail();
    $task->completed = true;
    $task->save();
}

이 시점에서 우리는 사용자가 작업 목록을 생성, 완료 및 표시할 수 있는 이벤트 기반 애플리케이션을 성공적으로 만들었습니다.

결론

Laravel Event Sourcing을 사용하면 이벤트 기반 애플리케이션을 구축하는 데 도움이 될 수 있습니다. 이벤트 중심 애플리케이션은 더 확장 가능하고 유지 관리가 용이하며 더 유연합니다. Laravel Event Sourcing을 사용하면 CQRS 및 ES 패턴을 포함한 여러 패턴을 쉽게 구현할 수 있으므로 개발자가 애플리케이션을 구축하는 동안 이벤트 중심 아키텍처를 사용할 것을 권장합니다.

위 내용은 Laravel 개발: Laravel Event Sourcing을 사용하여 이벤트 기반 애플리케이션을 구축하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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