2012-01-15 2 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 인터페이스를 정의하면됩니다.

요약하면 네, 괜찮습니다. 과거에이 패턴을 여러 번 사용했습니다.

관련 문제