GUIプログラミングのパターンを知りたい
衝動的にCakePHP以外のプログラミング話エントリー。
まずはsubtech - Pink Blossom Diary - AS3/Flex2 を使い始めて約半年より。
まずイベントドリブンなプログラミングに慣れてないのが一つで。Flex のイベントや自前イベントやをただ単に投げまくってると、とりあえずは動くけど後からメンテし辛いスパゲッティコードができあがる。このスパゲッティコードは goto 文が乱立するコードよりも酷く、goto だったら割と行き先は把握できるけど、イベントを投げまくってるだけだと、どこでどのオブジェクトがこのイベントを受け取るかが解らない。解りづらい。いちいちソースコード grep ですね、おめでたいですね。あのイベントが発生してから、そのイベントが終了したら発生するイベントが終了したらウィンドウ閉じて、その間は別のイベントはブロックして/発生しないようにして、とかもうわけわかんない。これも GUI プログラミングをしたこと無いからのような気もしなくもないけど。
まさにそうです。わけわかんないのです。
GUIなプログラミングはノベログコンバーターが久々だったんですが、以前に仕事でやったときもそうでした。イベントドリブンでステートフルなGUIプログラミングには、いわゆるWebサーバーアプリーケーションでの抽象化経験は全然役に立ってる気がしません。むしろ余計に感じたりします。
そんなわけで完成するのは殆ど抽象化されてない、かろうじて関数化で可読性を保っているスパゲティコード。アイデアを練りながら作るとなると初期段階での抽象化は無駄が多すぎると思うのです。画面変われば抽象化も変ります。そして今後も作り替えていくことを考えるとよけい抽象化する気が起きません。通信部分ぐらいは抽象化できるかなと思ったりもしますが、通信中にもいろいろイベントは起こりえるわけで、一筋縄ではいきません。
でもGUIプログラミングとはそういうことなのかもしれません。ステートフルかつ入力の種類(イベント)がめちゃめちゃ多ければ、そりゃ複雑にもなるなあと。ちなみにサーバーサイドのステートフルなアプリケーションを書いたことがありますが、同様に複雑でした。書いたのはネットワーク越しのマルチ接続コミュニケーションアプリなんですが、切断されたときとかタイムアウトとか、クライアントアプリには無い要素があります。いくらチェックをしても完璧に作れた気がしませんでした。なるほどネットゲームはどれも不安定になるわけだと思いました。
どなかいい本とかサイトとか知ってたら教えて下さい (_ _)
多くのイベントを扱う複雑な状態遷移を伴うフレームワーク作りをしなければいけなかったときに、とても参考になったのは以下の本でした。
Practical Statecharts in C/C++
GUIプログラミングに関するパターンの本ではないのですが、多分役立つのではないかと思います。
cocoaのfoundation frameworkとapplication kit frameworkをJava言語で学ぶデザインパターン入門を片手に読んでくと分かりやすいんじゃないかなと思います。
Flex用のフレームワークがいろいろとあります。
一番有名なのはCairngormです。
GUI勉強会楽しみにしています。