Commandパターン - TypeScriptでのアクションのカプセル化

アクションをオブジェクトとしてカプセル化するCommandパターンをマスターしましょう。Undo/Redo、タスクキュー、マクロ記録、トランザクションシステムのTypeScript実装例。

Behavioral

詳細な説明

Commandパターン

Commandパターンは、リクエストをオブジェクトとしてカプセル化し、クライアントを異なるリクエストでパラメータ化したり、リクエストをキューに入れたりログに記録したり、取り消し可能な操作をサポートできるようにします。

コアコンポーネント

  1. Command(インターフェース): execute()とオプションのundo()を宣言
  2. Concrete Command: コマンドを実装し、レシーバー参照とパラメータを保存
  3. Receiver: 実際の作業を実行するオブジェクト
  4. Invoker: コマンドにリクエストの実行を依頼(具象コマンドを知らない)

Undo/Redoの実装

各コマンドはexecute()で操作を実行し、undo()で操作を巻き戻します。コマンド履歴はスタックとして管理され、undoはスタックからポップして前の状態を復元します。

コマンドキュー

コマンドはシリアライズしてキューに格納し、遅延実行できます。これはタスクキュー、ジョブスケジューラ、コマンド履歴が信頼できるソースとなるイベントソーシングシステムの基盤です。

マクロコマンド

マクロコマンドは、1つの単位として実行される複数のコマンドの合成です。CommandとCompositeパターンを組み合わせて操作をバッチ処理します。

Strategyとの比較

どちらもオブジェクトに振る舞いをカプセル化します。違いはスコープです: Strategyは特定のタスクに使用されるアルゴリズムを交換します。Commandはパラメータ付きのリクエスト全体をラップします。コマンドは通常、保存、キュー、取り消しが可能な一回限りのアクションです。

ユースケース

Commandは、テキストエディタのUndo/Redoシステム、GUIボタンアクション(各ボタンがコマンドオブジェクトを保持)、タスクキューとジョブスケジューリングシステム、ロールバックが必要なトランザクションシステム、生産性アプリケーションでのマクロ記録に不可欠です。

試してみる — Design Pattern Reference

フルツールを開く