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 サイトの他の関連記事を参照してください。