tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル全フォームが使用するインスタンス(変数)の宣言方法
記事No9645
投稿日: 2009/11/27(Fri) 22:09
投稿者たくま
全フォームが使用するインスタンスの宣言方法

例えば、次のようなケースです。

・ Form1, Form2, Form3 があります。

・ プログラムを実行すると Form1 が表示されます。

・ Form1 上に配置されたボタンを押すと
   Form2 が表示され、 Form1 は閉じます。

・ Form2 上に配置されたボタンを押すと
   Form3 が表示され、 Form2 は閉じます。

・ それぞれのフォームはデータベースに対して
   データの抽出、更新を行います。

このような場合、データベースのコネクションは
どこで定義すれば良いのでしょうか?

私の考えつくところでは、次の方法ですが、
通常、どのようにするのでしょうか?

・ Form1 の Private 変数として宣言し、
   Form2 や Form3 へはプロパティを定義しておき
   それを使用して受け渡しを行う。

・ Module に Public 変数として宣言し、
   それを使用する。

上記方法はあまり良くないように思えてしまうのですが、
どうなのでしょうか?

よろしくお願いします。

VB2008

[ツリー表示へ]
タイトルRe: 全フォームが使用するインスタンス(変数)の宣言方法
記事No9646
投稿日: 2009/11/28(Sat) 05:26
投稿者たくま
追記します。

例として Form1,Form2,Form3 をあげていますが、
同じように Class1, Class2 、、、もあり、
Class1, Class2 からもデータベース操作を行います。

全てのクラス、フォームが使用する変数(インスタンス)は
どのように宣言、初期化すべきですか?

[ツリー表示へ]
タイトルRe: 全フォームが使用するインスタンス(変数)の宣言方法
記事No9647
投稿日: 2009/11/28(Sat) 09:30
投稿者魔界の仮面弁士
> 全フォームが使用するインスタンスの宣言方法
・モジュールを利用する。(MSIL の .netmodule の事ではなく、VB の Moduleステートメントの方)
・Class の Shared メンバーを利用する。
・シングルトン(Singleton)なクラスとして実装する。
・My.Settings を利用する。
・外部(ファイル/レジストリ/データベース/インターネット等)に保持する。
・My を Partial クラスで拡張して、接続情報等をそこで管理させる。
などなど、幾つかのパターンがあるかと思います。


> ・ Form1 の Private 変数として宣言し、
>    Form2 や Form3 へはプロパティを定義しておき
>    それを使用して受け渡しを行う。
> ・ Module に Public 変数として宣言し、
>    それを使用する。
> 上記方法はあまり良くないように思えてしまうのですが、
> どうなのでしょうか?
そういう実装もアリだと思います。あるいは、
・Form1 ではなく、Sub Main メソッド内にて管理する。
・プロパティとして渡すのではなく、コンストラクタ引数にて渡す。
・イベント等を通じて渡す。
などといった実装パターンもあるでしょうし、それらの組み合わせもあるかと。 

それぞれの優位性は、
・受け渡す情報が多すぎて、処理が煩雑化してはいないか?
・接続情報を、Form2/Form3 で書き換えたり、接続/切断状態を変更する事があるか?
・マルチスレッドで同時に利用される事があるか?
・今後の機能改修により、複数DBへの接続を管理する必要が生じる事はあるか?
などなど、個々のアプリケーション定義などに応じて異なりますので、
自アプリにとって使いやすと思われる方法を選択すればよいかと思います。

[ツリー表示へ]