2010年1月29日金曜日

連番

以前、VC6で作られたアプリのウィザード形式のダイアログに、追加ページを入れたいという仕事を依頼されたことがある。
ソースを見ると、12枚程あるダイアログのファイルには、きれいに連番が振ってあった。
さらに、ソースのあちこちに、連番のページ番号がハードコーディングされていた。
当時、設計・開発した人は仕様書に従って作っただけで、別に間違ってはいない多分。
ただ、自分なら連番ではなく、ファイルはきちんとした名前にして、番号は自動的に振る様にするだろうけど。

最も正直な修正方法は、連番を手で丹念に振り直すことであるが、追加するページは4枚目と5枚目の間なので、5枚目以降のプログラム中に埋められた連番を全部修正しなくてはならない。
ソースを盲目的に変更して行くことは、ちょっと嫌な作業である。テストも増えるので、動いているソースは、できるだけ変更したくはない。

ダイアログのウイザードは、ベースになるダイアログの上に重ね合わせて表示される子ダイアログである。そのダイアログに出てくる連番は、ラベルテキストとしてダイアログの指定位置に埋め込まれていて、
次へ、前へのボタンにも、ダイアログクラス名のインスタンスの連番が埋め込まれている。

さんざん思案して、1つ連番変換クラスを作成することにした。そして、ダイアログが連番を表示するところに、連番変換クラスのGetNumber()メソッドを挿入した。
つまり、実際のファイル番号、ダイアログ番号などの連番と新たに追加されたページも含めて連番変換クラスにリストで書き込んでおき、新しい連番を計算して返すようにしたのだった。

要するにコンバータである。通常コンバータは、一回変換すれば終わりという感じであるが、このコンバータはウィザードが実行されるたびに、連番を毎回変換する訳である。

おかげで、修正作業はあっという間に終わり、修正範囲も小さいのでテストも少なくて済んだ。
連番なんてのは、プログラムに計算させるべきである。ほんとに。

0 件のコメント:

コメントを投稿