全フォームが使用するインスタンスの宣言方法例えば、次のようなケースです。・ Form1, Form2, Form3 があります。・ プログラムを実行すると Form1 が表示されます。・ Form1 上に配置されたボタンを押すと Form2 が表示され、 Form1 は閉じます。・ Form2 上に配置されたボタンを押すと Form3 が表示され、 Form2 は閉じます。・ それぞれのフォームはデータベースに対して データの抽出、更新を行います。このような場合、データベースのコネクションはどこで定義すれば良いのでしょうか?私の考えつくところでは、次の方法ですが、通常、どのようにするのでしょうか?・ Form1 の Private 変数として宣言し、 Form2 や Form3 へはプロパティを定義しておき それを使用して受け渡しを行う。・ Module に Public 変数として宣言し、 それを使用する。上記方法はあまり良くないように思えてしまうのですが、どうなのでしょうか?よろしくお願いします。VB2008
追記します。例として Form1,Form2,Form3 をあげていますが、同じように Class1, Class2 、、、もあり、 Class1, Class2 からもデータベース操作を行います。全てのクラス、フォームが使用する変数(インスタンス)はどのように宣言、初期化すべきですか?
> 全フォームが使用するインスタンスの宣言方法・モジュールを利用する。(MSIL の .netmodule の事ではなく、VB の Moduleステートメントの方)・Class の Shared メンバーを利用する。・シングルトン(Singleton)なクラスとして実装する。・My.Settings を利用する。・外部(ファイル/レジストリ/データベース/インターネット等)に保持する。・My を Partial クラスで拡張して、接続情報等をそこで管理させる。などなど、幾つかのパターンがあるかと思います。> ・ Form1 の Private 変数として宣言し、> Form2 や Form3 へはプロパティを定義しておき> それを使用して受け渡しを行う。> ・ Module に Public 変数として宣言し、> それを使用する。> 上記方法はあまり良くないように思えてしまうのですが、> どうなのでしょうか?そういう実装もアリだと思います。あるいは、・Form1 ではなく、Sub Main メソッド内にて管理する。・プロパティとして渡すのではなく、コンストラクタ引数にて渡す。・イベント等を通じて渡す。などといった実装パターンもあるでしょうし、それらの組み合わせもあるかと。 それぞれの優位性は、・受け渡す情報が多すぎて、処理が煩雑化してはいないか?・接続情報を、Form2/Form3 で書き換えたり、接続/切断状態を変更する事があるか?・マルチスレッドで同時に利用される事があるか?・今後の機能改修により、複数DBへの接続を管理する必要が生じる事はあるか?などなど、個々のアプリケーション定義などに応じて異なりますので、自アプリにとって使いやすと思われる方法を選択すればよいかと思います。