現在作業中の 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() メソッドが実装されていて驚愕。一度、全体を見直すことにする。