2011年05月11日

MVVM:Messengerを理解するために自作してみた(2)

   このエントリーをはてなブックマークに追加 Clip to Evernote
前回の続きです。

Messageクラスが定義できたので、次は、Messengerクラスの定義です。
このMessengerクラスには、2つのメソッドを定義します。ひとつは、Register。
もうひとつは、Send メソッドです。

Registerメソッドは、View側で利用するもので、メッセージの型情報と「デリゲート」を
関連付けるものです。
この「デリゲート」は、ViewModelから、Messengerを経由して間接的に呼び出されます。

Sendメソッドは、ViewModelで利用されます。
このSendメソッドは、引数で渡されたMessageオブジェクトに対応したデリゲートを
呼び出す機能を持ちます。
この対応付けは、先ほどのRegisterメソッドで対応付けしたものです。

では、Messengerクラスの実装をしてみます。


ActionInfoというprivateなクラスを定義し、このオブジェクトを格納するListを用意しています。
Registerメソッドでは、ActionInfoのインスタンスを生成し、そこに情報をセットし、
Addメソッドでリストに追加します。
つまり、「XXXというMessegaeが送られたら、YYYYというデリゲートを呼び出してね」と
お願いするためのメソッドが、Registerメソッドです。
繰り返しますが、Registerメソッドは、Viewが利用するメッドになります。

Sendメソッドは、ViewModelが呼び出すメソッドです。
このメソッドは、引数で渡されたMessageに対応するActionInfoをリストから探し出し、
見つかったActionInfoのDelegateを呼び出しています。

なお、Messengerクラスは、ViewとViewModelの両方から同じインスタンスにアクセスする
必要があるため、Default静的プロパティを用意して、ViewとViewModelの両方から簡単にアクセス
できるようにしています。


これで、Messengerクラスとそれに関連するクラスの定義ができました。

次は、これをViewとViewModelでどのように利用するのかを示そうと思いますが、
続きは、次回に。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52146816