Commandパターン - TypeScriptでのアクションのカプセル化
アクションをオブジェクトとしてカプセル化するCommandパターンをマスターしましょう。Undo/Redo、タスクキュー、マクロ記録、トランザクションシステムのTypeScript実装例。
Behavioral
詳細な説明
Commandパターン
Commandパターンは、リクエストをオブジェクトとしてカプセル化し、クライアントを異なるリクエストでパラメータ化したり、リクエストをキューに入れたりログに記録したり、取り消し可能な操作をサポートできるようにします。
コアコンポーネント
- Command(インターフェース):
execute()とオプションのundo()を宣言 - Concrete Command: コマンドを実装し、レシーバー参照とパラメータを保存
- Receiver: 実際の作業を実行するオブジェクト
- Invoker: コマンドにリクエストの実行を依頼(具象コマンドを知らない)
Undo/Redoの実装
各コマンドはexecute()で操作を実行し、undo()で操作を巻き戻します。コマンド履歴はスタックとして管理され、undoはスタックからポップして前の状態を復元します。
コマンドキュー
コマンドはシリアライズしてキューに格納し、遅延実行できます。これはタスクキュー、ジョブスケジューラ、コマンド履歴が信頼できるソースとなるイベントソーシングシステムの基盤です。
マクロコマンド
マクロコマンドは、1つの単位として実行される複数のコマンドの合成です。CommandとCompositeパターンを組み合わせて操作をバッチ処理します。
Strategyとの比較
どちらもオブジェクトに振る舞いをカプセル化します。違いはスコープです: Strategyは特定のタスクに使用されるアルゴリズムを交換します。Commandはパラメータ付きのリクエスト全体をラップします。コマンドは通常、保存、キュー、取り消しが可能な一回限りのアクションです。
ユースケース
Commandは、テキストエディタのUndo/Redoシステム、GUIボタンアクション(各ボタンがコマンドオブジェクトを保持)、タスクキューとジョブスケジューリングシステム、ロールバックが必要なトランザクションシステム、生産性アプリケーションでのマクロ記録に不可欠です。