문제

WPF 응용 프로그램을 작업하고 있으며 MVVM 패턴을 사용하여 구조화하고 있습니다. 처음에는 뷰 모델을 재사용 할 수 있어야한다는 생각이 있었지만 이제는 더 이상 확실하지 않습니다.

  • WinForms 응용 프로그램에 비슷한 기능이 필요한 경우 뷰 모델을 재사용 할 수 있어야합니까?
  • Silverlight는 WPF가하는 모든 일을 지원하지 않습니다. Silverlight 응용 프로그램을 재사용 할 수 있어야합니까?
  • 응용 프로그램을 위해 Linux GUI를 만들고 싶다면 어떻게해야합니까? 그렇다면 모노로 구축하려면 뷰 모델이 필요합니다. 이것이 제가 노력해야 할 것입니까?
  • 등등..

그래서; 하나의 특정보기를 염두에두고 ViewModel 클래스를 작성해야합니까, 아니면 재사용 가능성을 생각해야합니까?

도움이 되었습니까?

해결책

귀하의 질문에 답하려면 단일 책임 원리에 대해 생각해보십시오.

"클래스는 바뀌는 이유와 하나만 있어야합니다."

나는 이유에서, 당신은 일반적으로 여러 뷰를 위해 뷰 모델을 재사용하고 싶지 않습니다. 내가 주장 할 주된 이유는, 그것이 당신의 뷰 모델에게 변화를 한 두 가지 이상의 이유를주기 때문입니다. 다시 말해, 하나 또는 다른 견해가 변경되면 변경해야합니다. 제 생각에는 이것이 바뀌어야 할 두 가지 이유입니다. 어디에서 멈추나요? 이 경우 간단하게 유지하고 하나의 뷰 모델을 뷰에 묶습니다.

WPF를 사용하여 MVVM에 대해 생각해야 할 또 다른 것은 데이터 템플릿입니다. 각 뷰 모델이 하나의 단 하나의 뷰를 제공하는 경우 달성하기가 훨씬 쉽습니다.

다른 팁

일반적으로 yagni 원칙을 적용하십시오 - 아마도 그것을 필요로하지 않을 것입니다. 이러한 일이 잠재적으로 발생하는 것으로 볼 수 없다면, 현재 소프트웨어가 현재 가지고있는 요구 사항에 대해 소프트웨어를 작동시킬 수있는 가장 간단한 접근 방식을 유지할 것입니다.

내 마음 속에, MVVM의 주요 목표는 단위 테스트로 쉽게 테스트 할 수없는 코드를 제거하는 것입니다.. 보기 모델은 단위 테스트를 할 수 있지만보기는 할 수 없으므로, 이는보기를 가능한 한 바보로 만들어 달성됩니다. 이상적으로는 XAML에서 수행 할 수있는 것처럼보기는 완전히 선언적이고보기 모델에서만 데이터 바인드 만 있습니다. 그러므로 "뒤의 코드 없음"만트라.

다른 UI 기술에서 뷰 모델의 재사용 성은 실제로 MVVM의 목표가 아닙니다. 당신이 그것을 시도한다면, 당신은 아마도 UI 기술에 맞는 코드를 다시 뷰로 뷰 모델을 재사용 할 수 있도록 유혹 할 것입니다. 이것은 테스트 가능성의 주요 목표에 위배됩니다.

다른 UI 기술을 지원할 필요가 있다면, 뷰 모델의 일반적인 논리를 공유 "프레젠테이션"레이어로 고려할 수 있습니다. 그래도 필요한 것은 확실하지 않을 것입니다.

이것은 오래된 질문이므로 다른 답변을 추가하는 것을 망설입니다. 그러나 지금까지 게시 된 모든 답변은 요점을 놓쳤다. MSDN의 답변 매우 분명합니다 : ViewModel 은이 그림에서 보여 주듯이 다양한 OSS의 많은 관점에서 매우 구체적으로 공유 할 수 있습니다.

enter image description here

그렇지 않으면 필연적으로 중복 코드로 이어질 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top