2009-08-21 3 views
1

서비스 로케이터 클래스를 사용하여 WPF 페이지를 바인딩 할 ViewModel을 제공하는 경우. ViewModel을 Singleton 범위 또는 Factory 범위로 설정해야합니까? 하나는 일반적으로 WPF 응용 프로그램을위한 더 좋은 아이디어입니까 ??WPF 응용 프로그램에서 서비스 찾기 패턴을 사용할 때보기 모델의 범위

실버 라이트에서 싱글 톤은 사용자 정의 컨트롤이고 전경 안팎으로 만 이동한다는 점을 잘 알고 있습니다. 하지만이 패턴을 적용하기 전까지는로드 할 때마다 페이지 및 해당 VM의 인스턴스를 새로 작성했습니다.

나와 내 동료는 각 옵션에 대해 모든 장점과 단점을 극복했으며, 우리 시나리오에서 더 좋은 옵션은 없습니다.

감사합니다.

답변

2

보기 모델 싱글 톤을 사용하지 않을 것입니다. 전체 사용자 세션을 위해 한 지역에 유지되는보기가 아닌 한. 네비게이션이나 메뉴와 같은 것들. Prism/Composite WPF를 사용하는 경우 유니티를 IoC 나 Service Locator로 사용하면 (보기 만 사용하는 경우) 뷰 모델/프리젠 테이션 모델은 가비지 수집을 위해 제공 될 때 만들어집니다 닫힐 때. 이렇게하면 각 화면이 의도 한대로 수명주기를 거치게됩니다.

RegionManager (CompositeWPF)와 같은 것을 사용하여 명시 적으로 닫힐 때까지 메모리에 View Model을 보유 할 수 있습니다. 이렇게하면 사용자가 상호 작용을 유지하면서 열린보기를 탭할 수 있습니다 (필요한 경우). 사용자가 화면을 저장/닫기를 결정하면 RegionManager에서 제거 된 다음 가비지 수집됩니다.

싱글 톤은 아주 특정한 목적으로 사용되는 디자인 패턴입니다. 즉, 하나만 있으면되고 응용 프로그램의 수명 동안 하나만 필요합니다. 그것이 내가 머무를 필요가 없다면.

0

만약 내가보기 모델이 무엇을하고 있는지 생각하기 위해 뒤로 물러서면; 나는 그것에게 모델을 할당하고 내보기 명령이나 바인딩 속성을 가지고있다.

즉각적으로 각 ViewModel은 모델에 특정한 인스턴스입니다.

또한 ViewModel 메서드는 일반적으로 현재 모델 인스턴스에서 작동합니다. 즉, 방법은 분리 된 논리 단위가 아닙니다. 즉

interface IService 
{ 
    Foo Model; 
    Result DoSomethingWithModel(); 
} 

은 자체 인스턴스 상태에 따라 논리가 달라집니다. 당신이 오직 하나 개의 요청이 있더라도

interface IService 
{ 
    Result DoSomething(With me); 
} 

좋은 코드 연습, 내 의견으로는, 각 요청에 새로운 뷰 모델 인스턴스를 주입하는 것이 반면

는 순수한 논리적 서비스입니다.

+0

주의해서 아래쪽 표를 설명하겠습니까? 내가 받아 들인 대답과 같은 결론에 도달함에 따라, 여기 : http://stackoverflow.com/questions/6188584/viewmodel-and-singleton-pattern –

관련 문제