2010-08-16 4 views
8

몇 가지 매개 변수를 기반으로 파일을 다운로드하는 것이 목표입니다.ViewModel의 책임

첫 번째 단계는 이러한 매개 변수를 설정 (또는 검색)하는 것입니다.

FileDownloadsManager가 다른 매개 변수 집합을 검색합니다 (구성 파일을 통해). 올바른 파일을 다운로드하기 위해 사용할 매개 변수를 정확히 알고 있습니다.

이러한 매개 변수는 클래스에 저장되며이 클래스의 인스턴스 목록이 있습니다.

즉, 가능한 여러 매개 변수 세트로 파일을 다운로드 할 수 있습니다.

이러한 ParameterSets 주위에 나는 그들을 목록에 표시하고 일부보기 전용 속성을 추가 할 수 있도록 ParametersSetsViewModels를 작성했습니다. 내부적으로 ParametersSetsViewModels에는 View Model의 멤버에 대한 소스로 사용되는 기본 ParametersSets에 대한 참조가 있습니다.

이제 매개 변수 집합을 선택하면 관련 파일을 다운로드하고 싶습니다.

누구의 책임입니까?

ViewModel이 너무 활동적인 경우 다운로드 한 파일을 반환하는 메서드를 사용하면 MVVM 패턴과 대조되는 느낌이 들었습니다. 이걸 네가 어떻게 생각하니?

보너스 : BackgroundWorkers 또는 WebClient의 비동기 메서드로 백그라운드에서 다운로드 할 수 있어야합니다.

답변

19

모두들 MVVM에 컨트롤러가 없다고 가정합니다. MVVM은 실제로 MVC의 변형으로 ViewModels를 추가 한 것입니다.

대신 MVCVM으로 지정해야합니까?

ViewModels는 뷰에서 "GUI"코드를 오프로드하고 바인딩 할 데이터를 포함하기위한 것입니다. ViewModel은 어떠한 처리도해서는 안됩니다. 좋은 테스트는 ViewModel이 자동화 된 유닛 테스트를 통해 테스트 할 수 있으며 데이터 소스 등에 의존하지 않는다는 것입니다. 데이터가 실제로 어디에서 왔는지 (또는 누가 표시하고 있는지) 잘 모르는 상태입니다.

컨트롤러는 간과되거나 회피 될 수 있지만 컨트롤러는 표시 할 데이터 모델과보기를 결정해야합니다. ViewModel은 모델 (MVVM의 M)과 뷰 사이의 다리입니다. 이렇게하면보다 단순한 "분리 된"XAML 제작이 가능합니다.

귀하의 질문에 대한 답변으로 처리가 컨트롤러에 의해 처리되어야합니다. 바쁜 지표 등을 표시하기 위해 ViewModel을 업데이트해야하지만보기 또는 모델 또는 ViewModel의 책임이 아닐 경우

+1

"MVCVM"에 대한 귀하의 통찰력에 감사드립니다. 이것은 분명히 가치있는 것입니다 : 컨트롤러는 여전히 살아 있습니다! –

관련 문제