VB.NET WinForms アプリにグローバル変数を格納するためのベスト プラクティスは何ですか。たとえば、ユーザーがアプリにログインするときに、アプリ全体でアクセスできる CurrentUser オブジェクトを保存したい場合があります。これをオブジェクトとしてモジュールに保存するか、必要なすべてのグローバルのメンバーを含むクラスを作成できますが、それでもこのインスタンスをどこかに保存する必要があります。
フレームワークはこれに対する簡単な解決策を提供しますか?
VB.NET WinForms アプリにグローバル変数を格納するためのベスト プラクティスは何ですか。たとえば、ユーザーがアプリにログインするときに、アプリ全体でアクセスできる CurrentUser オブジェクトを保存したい場合があります。これをオブジェクトとしてモジュールに保存するか、必要なすべてのグローバルのメンバーを含むクラスを作成できますが、それでもこのインスタンスをどこかに保存する必要があります。
フレームワークはこれに対する簡単な解決策を提供しますか?
「しない」は少し厳しいと思います。スティーブマコネルからの引用です。
規律とともに使用されるグローバル変数は、いくつかの状況で役立ちます
優れた大工が仕事に適したツールを持っていて、必要に応じて適切なツールを使用するのと同じように、プログラマーもすべてのツールを自由に使用する必要があります。
「TourdeForce」コードコンプリートから直接、グローバルデータを使用するいくつかの理由があります。
McConnellも言います:
最後の手段としてのみグローバルデータを使用してください。グローバルデータの使用に頼る前に、いくつかの代替案を検討してください。
彼がリストしている選択肢は次のとおりです。
私がここで言及したことは、素晴らしい本CodeCompleteで素晴らしい報道を得ています
グローバルにアクセス可能な変数を、変数を作成または設定するクラスなど、適切なクラスのパブリック読み取り専用静的プロパティとして格納できます。
私の習慣は、 CurrentUser、ConfigFilePathなどのグローバル変数をprogram.vb ( sub mainを持つスタートアップ クラス) に配置することです。そうすれば、プログラムの名前空間を介してアクセスする必要があるため、グローバル変数を無意識に使用する人はいません。
ビジネス ロジックでは、グローバル変数を直接使用することはありません。関数でグローバル変数を使用する必要がある場合は、関数パラメーターとして送信する必要があります。
グローバル変数の使用を避ける方法はありません。私見、それらを本名で呼び出し、慎重に使用してから、シングルトン、セッション、またはファイルでそれらをマスクすることをお勧めします。