なんだか定番ネタっぽいのですが、個人的見解を書いてみようとおもう。
今回のForm_Load問題?の発生はこちら。
画面Load時のClose処理について。
すでにいえ蔵さんの疑問・問題は無事に解決されたようなのですが、それとは別の議論が白熱しています。
とりあえず「いえ蔵さんよかったですね!」と言わせてください。
ざ~と読んでていくつかの問題を同時に議論していて、結果ややこしくなっている感がします。
今後の為に問題の整理と私自身の思ったことを書いてみます。
1、Form_Loadでおこなう初期化について。
Form_Loadイベントハンドラでその画面を閉じる処理を行うのは「メモリ リーク」などの問題以前にすべきでないのか?って問題ですが、これは開発するアプリの挙動に関わる部分でから答えは1つではないと思います。それこそ人それぞれ考えがあるでしょう。
その上で、私は「開いたならば勝手に閉じない」ことを約束事としてプログラム設計を行います。
たとえば、[一覧画面]から一覧行に対する[詳細画面]を開く必要がある場合、①一覧で行を選択して②詳細画面を開く。という超不親切な仕様だとします。(説明の為にそうします)
ならば、一覧画面で「行を正しく選択しているか」を検証し、画面を開く開かないかを決めることができると思います。
個人的にはここまでやって後は[詳細画面]で表示すべき情報を取得し、それが失敗したのならばメッセージを出して、その後の操作はユーザーに一任すべきだと思います。
「いやいや検証するならば詳細画面に表示するデータの存在チェックもすべきだ!」という反論もあると思いますが、それは各画面の「役割」を無視した設計になるので好ましくないかな~と思うのでやりません。
さらに処理に失敗する場合、発生しうるエラーをシステムエラーなのか業務(操作)エラーなのかを切り分けておく必要があると思います。今回の会議室での問題は前者(DB接続エラー)なのでこれをアプリケーションの起動時のみ検証するのでは不十分だと思います。詳細は別に。。。
2、DBコネクションの扱いについて。
Webアプリでは「DBコネクションは必要な時になるだけ短い時間だけ開く」ってのが私は常識だと考えてるので、Windowsアプリでの話しになるのでしょうか?会議室では「コネクションを持ちまわるメリットはあまりない」という結論がでており、いえ蔵さんの問題も解決しています。
3、Form_Load時に発生しうる例外への対応。
1に関わるのですが、DB接続の失敗など明らかにユーザーの想定しないエラーについてはアプリケーションのエラーとしてユーザーへの通知を行う必要があると思います。そうなるとその場その場で例外を捕捉して対処すべきだと思います。
アプリケーションの初期化時にチェックするのが「誤り」ではなくて、チェックしたとしても「画面でもエラーを想定する必要がある」のですよね。
4、Form_Loadはクラスのコンストラクタ(New)に該当するのか?
Formクラスのコンストラクタは別に存在するのだし、違うという認識なのですが、間違ってるのでしょうか・・・
確かに自前で用意したFormクラスのメンバの初期化はForm_Loadでするのか?と問われたら、それは違うと答えます。
しかし、Form のNewメソッドに追加するのは躊躇してしまうのも事実です。なぜならば該当箇所は
「Windows フォーム デザイナで生成されたコード」って括られてるんですよね。足していいの?って思いますw
5、画面を開く際の検証メソッドの使い方。
1で言ってます。開く画面の役割に極端に介入しない範囲でならば検証もOKかと。
6、VBという言語のメリット・デメリット。
世の中いろんな人がいるのだし、いろんな使い方があっていいんじゃない?って感じです。
ただし、自分が関わるプロジェクトならば事前にコーディング規約を用意してそれに沿うようにします。
これができない人がいそうならば、こちらでそれに添えるようなプログラムの雛形を用意して渡します。もちろん時間が確保できるのならば(自分の考えを)伝えて習得してもらうのが一番だと思います。
7、プログラマのスキルについて。
6と同じでいろんな人がいてもいいんでない?
もしすべてのプログラマが「できる人」ならばおそらくは開発ベンダーが「供給過多」となり私たちの仕事がなくなってしまいますw
それとこの問題が発生してしまう背景には「人を育てる環境」が企業から減っていっている兆候ではないかとも思います。だからネットで情報を求めるわけですし、何も知らないだから質問の仕方も的を得ないものになる。
新たにプログラマになる人がまずは得るべきスキルは「情報を収集する」ことでしょうね。これが嫌ならばそもそもプログラマなどには向かないかもしれません。
ん~~言いたいことしか言ってないw
一応参考にさせてもらったBLOG様を以下に
なぜ Load イベントで判断する?
[Form Load Event]で初期化する問題
投稿日時 : 2006年9月22日 1:08