2009-05-29 11 views
1

私はC#で静的クラスを使用するときを読んでいますが、一番上の答えが必ずしも私の質問に答えるわけではありません。私は、HTTPサーバーを介して、同様のハードウェアのかなりのインターフェイスとのインターフェイスを持つアプリケーションを持っています。各デバイスにログインする必要があり、資格情報は通常同じです。私は、Properties.Settings.Default.etcを使ってアプリケーションのワイドな設定を処理しています。しかし、簡単には、デバイスに個別にログインするときに最後に使用されたユーザー名/パスワードを追跡します。オプションウィンドウで設定可能なデフォルトは、最初に使用され、一時的な設定が変更され、デフォルトで使用されているにもかかわらず、オプションウィンドウで変更されない限り変更されません。静的クラス...これは問題ありませんか?

とにかく、それがシナリオは、質問に関して、私はこれをやっている...だ:

private static class TemporarySettings 
{ 
    public static string Username = Properties.Settings.Default["Username"].ToString(); 
    public static string Password = Properties.Settings.Default["Password"].ToString(); 
} 

は愚かなことですか?

+0

うん...タイトルに引用がありました... 静的クラス...内部プロパティ管理などに使用するのは "OK"ですか? –

+0

私は...やった プライベート静的クラスのEventHandler { /* ... * /} そして、クラスで私のイベントハンドラのすべてが含まれて?私は可読性と有用/便利な組織のために多かれ少なかれ行きます... –

+0

@Berdon Magnusは、静的なイベントハンドラクラスを使用しないでください。メモリリークに似た副作用を作成します。これは、イベントパブリッシャーがそのサブスクライバーへの参照を保持しているためです。別の質問へのJon Skeetの答えを参照してください:http://is.gd/JkT1 –

答えて

3

それはあなたの問題を完全に解決するかもしれません(もしそうであれば、それを変更しないでください)。しかし、このアプローチが道路の下で起こるかもしれないいくつかの問題があり、それらが何であるかを知るのに役立ちます。

  1. アプリケーションを再起動せずにユーザー名とパスワードを変更する場合は、そのオプションはありません。設定ファイルの変更を監視し、値が変更された場合は再ロードするロジックを記述できます。
  2. 複数のユーザー名とパスワードのセットに対してコードを "再利用"したい場合(特に、変更を監視するなどの動作を追加する場合)は、インスタンスに変換する必要があります。
  3. このクラスに依存する単体テストクラスを使用したい場合、値をスタブするのは非常に困難です。あなたはあなたがそれらによって焼かれるだろうという現実的なチャンスがあると思うしない限り、繰り返しに

は、しかし、あなたは離れているため、これらの可能性問題の最も簡単な解決策(あなたが定義した通り)から敬遠べきではありません未来。それ以外の場合は、後で必要になったときにインスタンスクラスに切り替えることは、おそらく非常に難しいリファクタリングではありません。

0

ユーザー名とパスワードを同じ値に設定していますが、それ以外の値はnoです。

+0

Heh - 私のコピーと貼り付けといくつかの削除がそれにつながりました...:P –

1

また、readonlyとマークするか、ゲッターだけを持つプロパティを使用してください。

+0

私はそれらを読み取り専用としてマークしていませんなぜなら私は実際に永続的な設定とは別にセミパーシステントデータを保存するためにユーザーが別のユーザー名/パスワードを入力したかどうかによってそれらを実際に変更するからです。 –

関連する問題