2012-01-15 6 views
2

アプリケーションにログインしたユーザーが複数のクラスにまたがってデータを共有した後にユーザー情報を保持したいとします。静的クラス内にユーザー情報を格納する

通常私は静的クラスのプロパティで、このようなものを維持:

public User CurrentUser { get; set; } 

あなたの考えは何ですか?

ありがとうございます。

WPFで
+3

どのようなアプリですか? WinForms? ASP.NET? WPF? –

+0

申し訳ありませんが、私はそれを指定していない、投稿を編集しました。 – saber

+0

@ChrisShain私はタグを編集しました – saber

答えて

3

// You can use your Application.Current.Resources dictionary to store the 
// current logged-in user info. 
Application.Current.Resources["UserInfo"] = userInfo; 

は、その後、あなたのアプリケーション内の任意の場所に現在のユーザ情報オブジェクトを取得することができます。あなたは現在ログイン中のユーザーに関する必要な情報がすべて含まれていUserInfoと呼ばれるクラスを持っている想像してみて次のコードで:

var userInfo = Application.Current.Resources["UserInfo"] as UserInfo; 
+1

良い点だと思いますが、シングルトンを実装する方法ではなく、シングルトンを使用すべきかどうかという疑問があります。しかし、WPFでは、これはXAMLのUserInfoにバインドできるので、これを行うには良い方法だと思います。 +1 – ColinE

+0

私は通常、テスト容易性の問題からシングルトンクラスの使用を避けます。さらに、コードの複雑さが増します。私の意見では、Application.Resources辞書オブジェクトの使用は簡単で簡単です+それはテスト可能です:D –

3

あなたが提案している何singleton内のユーザ情報を格納することです。これは、よくデスクトップアプリケーションでよく使用されるよく知られているパターンです。テスト容易性は、インターフェイスを介して公開されていないシングルトンを持っている場合、それは可能ではない、

  • (または:ありシングルトンパターンに関連する汚名の多くは、それはしばしばいくつかの欠点に、ひんしゅくを買うされ、またあります簡単に)あなたのコードをテストします。
  • スケーラビリティ、シングルトンは常にシングルトンになるので、この責任を共有することはできません 複数のインスタンス間でアプリケーションを拡大できるようにします。これは通常、サーバー側のアプリケーションでのみ問題になります。デスクトップ上でこれは実際には適用されません
  • 同時実行性、シングルトンにアクセスする複数のスレッドがありますか?もしそうなら、それをスレッドセーフにする必要があります。

デスクトップアプリケーション内では、問題の可能性が高いのは、最初のテスト容易性だけです。その場合、IUserインターフェースを定義するだけで良いです。

要約すると、はい、これは問題ありません。私はこのパターンを過去何度も使ってきました。

関連する問題