ホームページ > PHPフレームワーク > Laravel > Laravel 開発: Laravel Event Sourcing を使用してイベント駆動型アプリケーションを構築するにはどうすればよいですか?

Laravel 開発: Laravel Event Sourcing を使用してイベント駆動型アプリケーションを構築するにはどうすればよいですか?

王林
リリース: 2023-06-13 12:06:50
オリジナル
1072 人が閲覧しました

Laravel 開発: Laravel Event Sourcing を使用してイベント駆動型アプリケーションを構築するにはどうすればよいですか?

イベント駆動型アプリケーションは、イベントとイベント ハンドラー (イベント ハンドラー) を使用して実装されるアプリケーションです。イベント駆動型のアーキテクチャにより、アプリケーションの拡張と保守が容易になり、柔軟性が高まり、変更への適応が容易になります。

Laravel は、イベント駆動型アプリケーションの構築に役立つイベント ソーシングと呼ばれる機能を提供する人気の PHP フレームワークです。この記事では、Laravel Event Sourcing を使用してシンプルなイベント駆動型アプリケーションを構築する方法を紹介します。

1.Laravel イベントソーシングとは何ですか?

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 を使用すると、イベントを保存および復元できます。 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 を使用するイベントソーシング

Laravel イベントソーシングを使用してイベントを保存できるようになりました。

イベントを保存および取得するためにイベント ストアを作成する必要があります。これを実装するには、Laravel のアプリ フォルダーに TaskEventStore.php というクラスを作成します。

use BroadwayEventStoreEventStore;
use BroadwayEventSourcingEventSourcingRepository;

class TaskEventStore extends EventSourcingRepository
{
    public function __construct(EventStore $eventStore)
    {
        parent::__construct(
            $eventStore,
            new TaskAggregateRootEventSourcedFactory(),
            new TaskAggregateRootEventSourcedRepository()
        );
    }
}
ログイン後にコピー

TaskEventStore クラスのコンストラクターで新しいイベント ストアを作成し、EventSourcingRepository 内のブロードウェイ ライブラリ 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,
    ],
];
ログイン後にコピー

最後に、実装する 2 番目のイベント ハンドラーは 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート