シングルトンをグローバル変数の代わりにしない

現在作業中の Flash 案件で、画面上にユニークなものを全てシングルトンにしていたら、案の定「これはひどい」コードになりつつある。免罪符として、コメントに「これはひどい」と記しておいた。結論を言うと、意思決定力が弱いのに、設計しながらコーディングを行っていることがまずい。

で、シングルトンを使ったひどいコードはこんな感じだ。next と prev のボタンを持つ Pager クラスの、ボタンが押された際のイベントを処理するコードの一部。ボタンが押されたら ImageList のインデックスが切り替わるのが、アプリケーションが求める機能である。

import ImageList;
class Pager {
private function onNextButtonRelease():Void {
ImageList.getInstance().next();
}
private function onPrevButtonRelease():Void {
ImageList.getInstance().prev();
}
}

そもそも ImageList が本当にユニークなのかという問題。そして、シングルトンをグローバル変数代わりにしか使っておらず、無駄に密結合になっている問題がある。ここは、Pager がイベントを出して、上のレイヤで処理するように変更した。

class Pager {
private function onNextButtonRelease():Void {
this.dispatchEvent(...);
}
private function onPrevButtonRelease():Void {
this.dispatchEvent(...);
}
}

実はこの Pager すらもシングルトンという、ひどい有様。grep したら 10 以上のクラスで getInstance() メソッドが実装されていて驚愕。一度、全体を見直すことにする。