多数のイベントと複雑な状態遷移の管理

http://subtech.g.hatena.ne.jp/secondlife/20070813/1186999047

まずイベントドリブンなプログラミングに慣れてないのが一つで。Flex のイベントや自前イベントやをただ単に投げまくってると、とりあえずは動くけど後からメンテし辛いスパゲッティコードができあがる。このスパゲッティコードは goto 文が乱立するコードよりも酷く、goto だったら割と行き先は把握できるけど、イベントを投げまくってるだけだと、どこでどのオブジェクトがこのイベントを受け取るかが解らない。解りづらい。いちいちソースコード grep ですね、おめでたいですね。あのイベントが発生してから、そのイベントが終了したら発生するイベントが終了したらウィンドウ閉じて、その間は別のイベントはブロックして/発生しないようにして、とかもうわけわかんない。これも GUI プログラミングをしたこと無いからのような気もしなくもないけど。

推測するに、状態遷移の管理の仕方の問題なんじゃないかなぁと。複雑な状態遷移を実現する場合は、FSMを使うととても状態管理が楽になります。どんなイベントが来た時に、どんなアクションを実行して、どんな状態に遷移するかというのを1箇所で管理できるから。

FSMも少しやってみると割と深くて、Practial Statecharts in C/C++という本では状態遷移フレームワークについて1冊丸々書いてあって、オレオレ状態遷移フレームワークを実装するときにとても参考になりました。

FSMのGUIアプリの適用方法は、Robert C.Martinが以下のパターンでまとめているので、参考になるのではないかなぁと。
http://www.objectmentor.com/resources/articles/taskmast.pdf