先日から作り始めているFlex2のアプリケーションなのですが、サーバとの通信でログインするところまでは実装できました。
で、Flex2にはCairngorm FrameworkなるMVCフレームワークが存在しているんですけれども、ひとまず独自実装で実装しています。
Flex2の開発がどんな感じなのかをみてみたかったのと、やっぱりいくらチュートリアルとかやってみても、自分でソースコード書いてみないと分らないことってありますからね。
ということで、手戻り予定の実装済みクライアントの巻です。
はい、さっそくクラス図です。
ちょっとしか書いてないのに意外とあるように見えますね。
まぁ、でも中身はすごく単純でMXMLで実装されているのが、ビューにかかわる「NoelPortal」と「LogInForm」と「UserInfoPanel」です。
コントローラが「NoelPortalController」とユーザ周りの操作の委譲先となる「LoginFacade」、
(今見直してみるとユーザ周りの操作を委譲するのにLoginFacadeっていうのもないよなぁという気分にさせてくれますね^^;後で直すことに致しましょう。)
で、モデルが「User」です。
Flex2はイベントドリブンなので、ビューに起こったイベントをコントローラのリスナでキャッチするように意識すれば、MVCの分離はきれいにできるようになっています。
なんかほんとにJavaのSwingを使ってるような気分になりますね。
で「LoginFacade」にはサーバとの通信を実装するわけなんですが、RemoteObjectを使った通信は非同期通信なので、リスナを設定しておいて、通信結果をリスナメソッドで受け取る形になります。
ちょっと説明だけだと分りにくいので、シーケンス図を交えつつ。
まずNoelPortalControllerのコンストラクタが呼ばれた時のシーケンスです。
LoginFacadeのコンストラクタを呼んで、ログイン時のリスナとして自身のloginCallBackメソッドを、通信異常時のリスナとして自身のfaultCallBackを登録しています。
これはサーバとの非同期通信完了時に呼ばれるリスナです。
続いて、NoelPortalがinitialize時に呼ばれるNoelPortal.initメソッド。
こちらはNoelPortalControllerのinitメソッドをコールして、
noelPortal.loginForm.btnLoginにイベントリスナとして自身のloginListenerを、
noelPortal.userInfoPanel.btnLogOutにイベントリスナとして自身のlogoutListenerを設定しています。
こちらは、ユーザがビューの操作を行った際に呼ばれるリスナです。
じゃあ、さっそくログインボタンが押された時にどうなるか。
Flex Frameworkさんの動作箇所ははしょってまいりましょう。
- NoelPortalControllerのloginListenerメソッドが呼ばれます。
- ログイン処理の委譲先であるLoginFacadeのloginメソッドが呼ばれます。
- RemoveObjectでサーバサイドの処理を行います。
- この先はFlex Frameworkさんがごにょごにょです。
- で、しかるべき処理が正常終了したなら、NoelPortalControllerのloginCallBackが呼ばれる。
こんな感じで実装していけば、既存のフレームワークを使わなくてもMVCを分離したまま、実装していくことができそうです。
ただしコントローラは、ビューにごっすりと依存しているので、ちゃんと切り分けるならビューにパブリックなメソッドを実装する形にしないとですね。
さてさて、明日以降に今度はサーバサイドのこととかなんとか。
がんばりまっしょい。



