じゃんぬさんやJITTAさんが頻繁に指摘されている問題なので詳細はそちらを参照してもらえば幸いです。
私はEntryPoint/初期化メソッドを実装することを薦めてます。(少しの初期化ならLoadに書いてしまうことも…秘密)
なぜそうなるかの一因を見てしまったので書いてみます。
こんなソースはダメ、技術者に勉強してね!…と一蹴するのは簡単なんですが、構造的な問題が垣間見えます。
とあるプロジェクトの仕様書記述基準に,「詳細仕様書のロジック記述はイベントの視点で書くこと。」とあります。これだと詳細仕様でなくプログラム仕様になってしまうのだが、このプロジェクトのPMは、詳細仕様とプログラム仕様は同一と考えている御様子。 パラパラ見ると, 各項目のCursorのGotFocus/LostFocus 時の処理も書いてあるのですが、業務仕様が見えない。「PGは仕様書通りに書けばOKで業務仕様を知る必要はない」というPG=コーダーというスタイル。 スタイルなので是非云々を言うべきではないのですが、問題は、そのイベント処理の記述のレベル。
詳細仕様書(?)を書いている人が殆ど実装経験が乏しい人で、先人から引き継いだパターンに則って記述しているものだから、 非Object指向なのは当然で、Windows.作法にも反しています。
(例)
FormLoad時:
権限テーブルと使用者を照合し、権限が無ければ終了する
変数/コネクション等の初期化を行う。
前画面から引き継いだパラメータ P1,p2,p3を使用し,Table xxxを引用し,項目 A,B CをGridで表示する
商品コード欄にGotFocus したとき. TEXTBOXの内容を全反転する。
商品コード欄からLostFocusしたとき,商品マスターを引用し,名称と単価を該当するテキストボック
スに表示する。コードが商品マスタに未登録の時は"xxxxxが未登録" とメッセージを表示し,カーソルを商品コード欄に設定する。カーソル位置づけに伴うイベント連鎖には配慮する。
ここまででも、突っ込み所満載ですね。
FormLoadでなぜ権限チェックする。Formインスタンス作成前にするものでしょう。
Load時にRDBを見に行ってデータ取得するのも私には抵抗あり。メソッド化したい。
カーソル制御..(VS2005では Leave/Entryでしょ...は置いといて)はプログラムでするのは避けたいものです.Event連鎖になりかねません。配慮せよと言われてもね。 Validationを知らないんだろうね。
このような仕様書に則ったコーディングを強いられたPGはどうなるか..この書き方が正しいと信じているPGも居るようです。自覚しないPGが悪いという見方もありますが、PGの芽を潰してしまったPMの責任も大きいと思うのです。
そもそも、ここまで細かい仕様書を書く手間でプログラムが完成する気がするのです。
納品物目的の日の目を見ない詳細(Event)仕様書なんて要らない.....言い過ぎかな!?
まだまだ、お寒い開発現場。