cqrs-and-handlers について
Symfony で CQRS のユースケースを構成するスキルです。コマンドとクエリのバスを分け、メッセージ設計、設定、ディスパッチ、テストを案内します。
主な機能
- 01コマンドとクエリのバス分離
- 02読み取り専用メッセージクラス
- 03メッセージごとに単一のハンドラー
- 04コマンドバスのミドルウェア設定
- 05コントローラーからのディスパッチ
活用シーン
- 01状態変更と読み取りの分離
- 02ハンドラー付きコマンドの追加
- 03ハンドラー付きクエリの追加
- 04ハンドラーとコントローラーフローのテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill cqrs-and-handlersインストール後、Claude Code で/cqrs-and-handlersを入力して読み込まれたか確認します。
同梱ファイルreference.md
詳細
Cqrs And Handlers(Symfony)
使用する場面
- 書き込みと読み取りを、別々のコマンドバスとクエリバスに分離する場合。
- サービスが状態を変更し、表示用のデータも返す場合。
- ユースケースを、専用のハンドラーを持つコマンドまたはクエリとして追加する場合。
デフォルトのワークフロー
- ユースケースに名前を付けます。コマンドは状態を変更し、クエリはデータを返します。
- メッセージを
readonlyクラスとして記述し、そのメッセージに対するハンドラーをちょうど1つ作成します。 - コマンドバスとクエリバスを別々に設定し、コマンドバスに
validationとdoctrine_transactionのミドルウェアを追加します。 - 小さなインターフェースを介してバスをインジェクトするか、
#[Target]を指定してネイティブのバスをインジェクトします。 - 薄いコントローラーからディスパッチし、クエリ結果または新しい ID を返します。
ガードレール
- コマンドは何も返さないか、作成した ID のみを返します。
- クエリには副作用がないため、キャッシュや再試行が可能です。
- メッセージごとにハンドラーは1つとし、ハンドラーから自身が処理するバスへ再度ディスパッチしないでください。
- 複雑なクエリでは、読み取りモデルは任意です。クエリがエンティティだけでは対応しきれなくなった段階で追加します。
段階的な情報開示
- 実行時の方針とリスク管理には、このファイルを使用します。
- 実装の詳細が必要な場合は、リファレンスを開きます。
出力要件
- コマンド、クエリ、およびそれぞれのハンドラー。
- バスの設定とミドルウェア。
- ハンドラーのテストと、コントローラーを経由する機能テスト。
リファレンス
reference.md
コメント
Markdown 対応