3/31/2013

Commandパターン考

どうもJudaです。

Commandパターンでは、4つの役割で表現する。

  1. Command
  2. Invorker
  3. Receiver
  4. Client

図1. それぞれの包含関係を表す。

ClientはInvorkerに指令を設定することが主な役割である。InvorkerはClientから通知を受けて、Commandを管理し、任意のタイミングで起動させる。
ReceiverはCommandで行われる動作の主体となる。指令(Command)を受けるもの(Receiver)としての役割がある。

各役割の行う機能に関しては、いくつか曖昧な観点があると思う。

  1. Clientはコマンド自体を知ることがあるのか。
  2. InvorkerにはCommandの実行タイミングを決める権限があるのか。
  3. InvorkerとReceiverは同一でもいいのか。
1の場合には、ClientがCommandAをInvorkerに設定するということを明示的に知っているのかどうかになる。ClientとInvorkerの間にレイヤーが介在して、レイヤーがCommandの詳細を司ることも考えられる。

2の場合には、Invorkerがレイヤーの役割を果たしているのか、そもそもの起動を役割としているのかである。レイヤーの役割だと、呼び出すCommandをどう扱うのかは、Invorkerに委ねられていると考える。起動を直接Clientから指示される場合も含めての抽象化であるとも考えられる。

3. C#でのEventHandlerを考えると、CommandはEventであるが、Receiverに相当するものはEventHanlderを所有するインスタンスである。Clientは外部にあるが、InvorkerもEventHandlerを所有するインスタンスであり、ややこしい。抽象的に考えている場合には、InvorkerとReceiverが同じであっても構わない。しかし具体的に考えた時に、ここにCommandPatternがあると考えるのは、少々つらい。Callbackパターンとして考えるほうがより具体的である。

0 件のコメント:

コメントを投稿