어떤 MVVM 프레임 워크를 사용해야합니까? [닫은]


233

MVVM 모델로 응용 프로그램을 개발하고 있지만 사용할 프레임 워크를 선택해야하는 시점에 도달했습니다.

가능한 옵션은 다음과 같습니다.

  • MVVM 툴킷
  • MVVM 재단
  • WPF 응용 프로그램 프레임 워크 (WAF)
  • 가벼운 MVVM
  • 칼리 번
  • 죄다
  • 프리즘
  • ReactiveUI

당신의 경험에서 어느 것이 더 낫습니까?


14
+1-좋은 질문이지만 '더 나은'을 명확히하십시오. 다른 프레임 워크는 서로 다른 장점을 제공하며, 요구 사항에 따라 다릅니다. 답변을 기대합니다 :)
Russell

WPF 및 Silverlight와 함께 최소한의 학습 곡선으로 사용할 수 있다면 매우 좋습니다.
Rangel

2
Caliburn도 확인하십시오. codeplex.com/caliburn
켄트 부가 아트

미안 켄트 Caliburn을 어떻게 잊을 수 있습니까?
Pete OHanlon

2
닫고 오래되었지만 ... 구성 요소 지원이 필요할 때 Prism (아래 답변)을 사용하여 첫 프로젝트를 수행했습니다. 내 마지막 프로젝트는 전혀 틀이 없었습니다. 명령 클래스 만 있으면 프레임 워크없이 MVVM을 수행 할 수 있습니다.
dave

답변:


194

실제로 달성하려는 목표와 이미 필요한 인프라의 양, 도움이되는 샘플을 쉽게 찾을 수있는 방법에 따라 다릅니다. 저는 적어도 하나의 MVVM 프레임 워크에 적극적으로 참여했으며 WPF Disciples 그룹을 통해 다른 사람들에게 정보를 제공했기 때문에 여기에 관심을 표명하겠습니다. 그렇게 말하면 다음과 같습니다.

Microsoft의 MVVM 툴킷 -여전히 알파 단계에 있습니다. 그것이 처음 출시되었을 때, 그것은하지 않은 일 때문에 제자들로부터 약간의 비용을 절약했습니다. MS는이 프레임 워크를 강화하여보고있는 것이기 때문에 아직 준비가되어 있지 않다고 말합니다.

MVVM Foundation -ah Josh Smith의 프레임 워크 버전입니다. 조쉬는 MVVM의 아빠 중 한 명이며이 패턴의 대변인이자 교사입니다. 결과적으로, 다른 프레임 워크에서 찾을 수있는 많은 부분에는 Josh의 지문이 있습니다. 이 프레임 워크는 MVVM의 기본 사항을 제공하기 위해 좀 더 난해한 문제를 다루지 않습니다. 원래 이것은 WPF만을위한 것이었지만 Laurent Bugnion과 같은 사람들은 기능 / 프로젝트를 추가하여 이것이 Silverlight 호환 프레임 워크가 될 것임을 의미합니다.

WAF- 경험이 없으므로 두려워 할 수 없습니다.

MVVM Light -Laurent Bugnion이 채택하여 버전 2로 업데이트했습니다. 이것은 매우 훌륭한 프레임 워크이지만 MVVM 응용 프로그램의 모든 측면을 다루지는 않습니다. Laurent의 배경을 고려할 때 Silverlight 및 Blendability 지원이 매우 강력합니다.

Laurent 업데이트 는 방금 .NET 3.5 및 .NET 4.0 버전이 기능 호환된다는 것을 알게되었습니다. 로랑 갈거야.

Cinch-Sacha Barber의 탁월한 WPF 전용 MVVM 프레임 워크 이것은 위에서 이야기 한 프레임 워크보다 더 많은 근거를 다룹니다. 훌륭한 프레임 워크이며 Bill Kempf의 탁월한 Onyx 프로젝트 에서 다루는 개념을 활용 합니다. Onyx는 MVVM 프레임 워크를 보완하기 위해 만들어졌으며 사람들이 MVVM / WPF에서 수행하기 어려운 기능을 추가합니다. 원래 WPF 전용으로 설계된 Onyx는 SL 호환성을 포함하여 발전해 왔습니다. 특히 제가 자랑스럽게 여기고있는 작업입니다.

프리즘 -다시 한번, 나는 그것을 사용한 적이 없지만 그것에 대해 많은 좋은 소식을 들었습니다.

Ocean -Cider 팀의 프로그램 관리자 인 Karl Shifflett은 최근 완전한 기능을 갖춘 WPF MVVM 프레임 워크를 발표했습니다. 다시 말하지만, 이것은 훌륭한 프레임 워크이며 권장 할 것이 많습니다.

결론은 다른 프레임 워크를 다운로드하여 프레임 워크를보고 생각하는 방식과 요구 사항에 가장 직관적으로 맞는 프레임 워크를 다운로드하십시오. 동일한 코드베이스에서 Silverlight를 지원하려는 경우 WPF 전용 프레임 워크를 할인해야합니다.


4
우리는 MVVM에 대한 전문적인 요구가 있기 때문에 우리가 작성한 것을 사용합니다. Josh가 수행 한 작업의 영향을 많이받으며 조만간 오픈 소스로 공개 할 예정입니다 (저는 독점 비트를 추출하는 데 바쁩니다). 골드 라이트라고합니다.
Pete OHanlon

이와 함께 데이터 액세스 계층 프레임 워크는 무엇입니까? LINQ, LLBLGen, EF, nHibernate?
Jirapong

프로젝트 및 요구 사항에 따라 다릅니다. 때때로 우리는 LINQ, 때로는 NHibernate, 때때로 Castle ActiveRecord, 때로는 eXpress Persistent Objects를 사용합니다.
Pete OHanlon

3
안녕하세요 Pete, MVVM Light Toolkit은 WPF 3.5 및 WPF 4에서 Silverlight 3 및 Silverlight 4와 동일하게 작동한다고 언급하고 싶습니다. 가능한 한 동기화 된 기능을 유지하기 위해주의를 기울이고 있습니다. 당신은
혼합 가능성

1
MVVM 툴킷이 Visual Studio 2010에서 작동하도록 업데이트되지 않은 것에 실망했습니다. 의사 결정 프로세스에이를 추가하고 싶을 수도 있습니다. 2010 년 내에 MVVM 템플릿을 사용하는 것으로 알고있는 대부분의 사람들은 MVVM Light를 사용하고 있으며 일부는이 이유로 단독으로 마이그레이션했습니다.
ScottCher

54

이 기사가 매우 유용하다는 것을 알았습니다 http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ 것을 알았습니다 다가오는 사용자를 위해 여기에 가져 왔습니다

Cinch 섹션을 업데이트하고 해당 기능에 silverlight 지원을 추가합니다

긴 이야기가 유감입니다

일반적인 특징:

• ViewModelBase 클래스 (INotifyPropertyChanged 인터페이스 구현 용)

• UICommand를 ViewModel의 처리기에 연결하는 클래스와 같은 RelayCommand

• 단위 테스트는 프레임 워크와 함께 제공됩니다.

죄다

• 저자 : Sacha Barber

• Silverlight 지원 : 아니요 (Cinch 버전 2는 Silverlight를 지원합니다)

• 설명서 : CodeProject에 게시 된 우수 기사 6 개

• 호스팅 : CodePlex

• 라이센스 : Code Project Open License

• 특징 :

  1. 첨부 된 행동

  2. IDataErrorInfo를 사용한 유효성 검사

  3. IEditableObject 지원

  4. 약한 이벤트 생성 및 구독

  5. 약한 이벤트를 사용하는 중재자 메시지

  6. IOC / DI 지원 (Unity 사용)

  7. 서비스 : 이벤트 로거, 메시지 상자, 열기 저장 대화 상자, 팝업

  8. 스레딩 도우미

  9. 메뉴 항목 지원

  10. 닫을 수있는 뷰 모델

  11. MVVM 코드 생성기

MVVM 라이트 툴킷

• 저자 : Laurent Bugnion

• Silverlight 지원 : 예

• 문서 : Laurent의 블로그 및 기타 개발자에게 제공되는 많은 기사

• 호스팅 : CodePlex

• 라이센스 : MIT 라이센스

• 특징 :

  1. MSI 설치 관리자

  2. VS 프로젝트 및 아이템 템플릿

  3. VS 코드 스 니펫

  4. 인터뷰 모델 통신을위한 메신저 시스템

  5. 이벤트를 명령으로 처리

MVVM 헬퍼

• 저자 : Mark Smith

• Silverlight 지원 : 아니요

• 문서 : Mark의 블로그에있는 일부 기사

• 호스팅 : 개인 웹 사이트

• 라이센스 : 정의되지 않음

• 특징 :

  1. 첨부 된 행동

  2. 태그 확장을 사용하여 뷰 모델 생성

  3. 속성 기반 검증

  4. ServiceProvider 접근 방식을 사용하는 IOC / DI

  5. 닫을 수있는 뷰 모델

  6. 대기 커서 (새로운 WaitCursor () 사용 {// 코드는 여기})

MVVM 재단

• 저자 : 조쉬 스미스

• Silverlight 지원 : 아니요

• 설명서 : Josh 또는 Marlon Grech의 블로그에서 메신저 구현에 대한 기사

• 호스팅 : CodePlex

• 라이센스 : MS-PL

• 특징 :

  1. 인터뷰 모델 통신을위한 메신저 시스템

  2. PropertyChanged 이벤트 모니터

칼리 번

• 저자 : Rob Eisenberg

• Silverlight 지원 : 예

• 설명서 : 사용 가능한 전체 온라인 설명서

• 호스팅 : CodePlex http://www.codeplex.com/caliburn

• 라이센스 : MIT 라이센스

• 특징 :

  1. 명령은 작업 위에 구축되므로 여러 입력 매개 변수, 필터 및 자동 비동기 실행을 포함하여 동일한 기능을 많이 공유합니다.

  2. 다양한 UI 구성 요소에 대한 활성화, 비활성화 및 종료 의미 처리와 같은 UI 수명주기 문제를 처리하는 발표자

  3. Caliburn 응용 프로그램은 완전히 테스트 가능

  4. 백그라운드 작업 관리자와 같은 다양한 유틸리티

  5. 다양한 UI 패턴 지원 (MVVM 만 아님)

  6. 의존성 주입 컨테이너

오닉스

• 저자 : William e Kempf

• Silverlight 지원 : 아니요

• 설명서 : CodePlex에서 제공되는 기본 소개

• 호스팅 : CodePlex

• 라이센스 : 지정되지 않음

• 특징 :

  1. ServiceLocator 패턴

  2. 사용자 정의 태그 확장을 사용하여 ViewModel 생성

  3. IDisplayMessage와 같은 UI 관련 서비스

칼슘

• 저자 : 다니엘 본

• Silverlight 지원 : 아니요

• 설명서 : CodeProject에 대한 2 가지 매우 자세한 기사 (1 부 및 2 부)

• 호스팅 : CodePlex

• 라이센스 : 저작권을 사용, 복사, 수정 및 / 또는 배포 및 보관합니다!

• 특징 :

  1. 런타임에 모듈을 활성화 또는 비활성화하기위한 모듈 관리자

  2. 동일한 API를 사용하여 클라이언트 또는 서버에서 사용자와 상호 작용하기위한 메시징 서비스

  3. 활성 뷰 또는 뷰 모델이 인터페이스를 구현할 때만 활성화되는 컨텐츠 인터페이스와 WPF ICommand를 연결하는 Command Service

  4. 툴바 및 메뉴 용 지역 어댑터

  5. 즉시 사용 가능한 클라이언트 서버 로깅

  6. 웹 브라우저, 텍스트 편집기, 출력 창 등과 같은 모듈을 포함합니다.

  7. 더티 파일 표시가있는 탭 인터페이스 (모듈 간 재사용 가능)

n 라우트

• 저자 : Rishi

• Silverlight 지원 : 예

• 설명서 : 저자의 블로그에서 제공되는 많은 기사 (링크는 CodePlex 프로젝트 홈 페이지 참조)

• 호스팅 : CodePlex

• 라이센스 : MS-PL

• 특징 :

  1. Blend3 비헤이비어 및 트리거 모델 지원

  2. 리소스 로케이터 프레임 워크

  3. 서비스보기 : OpenFileDialog, ShowMessage…

  4. 속성을 사용하여 View와 ViewModel을 함께 매핑

니토 MVVM

• 저자 : Shammah

• Silverlight 지원 : 아니요

• 설명서 : 아니요

• 호스팅 : CodePlex

• 라이센스 : 지정되지 않음

• 특징 :

  1. ICommand 인터페이스의 다양한 MVVM 친화적 구현

대양

• 저자 : Karl Shifflet

• Silverlight 지원 : 아니요

• 문서 : Karl의 블로그에서 제공되는 기사

• 호스팅 : 개인 웹 사이트

• 라이센스 : 지정되지 않음

• 특징 :

  1. VB.Net으로 작성

  2. 속성 기반 검증

  3. viewmodel 기본 클래스 : relaycommand, closeableviewmodel…

  4. SQL 서버 데이터 액세스 계층

기본 MVVM 프레임 워크

• 저자 : 레스터 로보

• Silverlight 지원 : 아니요

• 설명서 : 라이브러리에서 사용 가능한 샘플 응용 프로그램

• 호스팅 : CodePlex

• 라이센스 : MS-PL

• 특징 :

  1. 위임 명령 \ 키 바인딩

  2. VM 간의 메시징

  3. 동작이 첨부 된 명령으로 이벤트 처리

  4. 대화 상자 등을 서비스로 처리

  5. VS 코드 스 니펫

굿 라이트

• 저자 : Peter O'Hanlon • Silverlight 지원 : 예

• 설명서 : 라이브러리에서 사용 가능한 샘플 응용 프로그램

• 호스팅 : CodePlex

• 라이센스 : MS-PL

• 특징 :

  1. "작업 공간"관리 (닫을 수있는 문서 세트)

  2. 피부 지원

  3. VM 간의 메시징


좋은 포스트. Cinch 버전 2가 Silverlight를 지원한다고 덧붙였습니다.
Kildareflare

44

Pete의 위대한 답변에서 누락 된 프레임 워크를 설명하려고합니다.

MVVM 툴킷 (Microsoft) 은이 패턴을 가진 초보자를 지원해야하는 Visual Studio 프로젝트 템플릿이 포함 된 매우 가벼운 라이브러리입니다. Microsoft가 툴킷에 대한 좋은 피드백을 받으면이를 새로운 Visual Studio (아마 2010 년) 프로젝트 템플릿으로 구현할 수 있습니다.

프리즘 (Microsoft p & p) 은 MVVM 패턴에 대한 지원 이상을 제공하는 프레임 워크입니다. 이 프로젝트의 주요 목표는 모듈 식 WPF 및 / 또는 Silverlight 응용 프로그램을 구축하는 데 도움을주는 것입니다. MVVM 패턴을 구현해야하거나 .NET / WPF의 초보자 인 경우이 프로젝트를 권장하지 않습니다. 참조 : 링크 .

WAF (WPF Application Framework) 는 MVVM을 사용하여 WPF 앱을 만드는 데 도움이되는 간단한 프레임 워크입니다. WPF 전용이므로 Silverlight를 지원하지 않습니다. 그것은 Controllers 의 도입으로 대부분의 다른 MVVM 프레임 워크와는 다른 방식으로 진행됩니다. 이들은 애플리케이션 워크 플로우를 담당하며 다양한 ViewModel 사이를 중재합니다.


19

Meh. Mvvm은 실제로 IMO를 지원하기 위해 전체 프레임 워크가 필요하지 않습니다. 개념을 이해하면 INotify를 구현하는 깔끔한 VM 기본 클래스로 시작하여 시작하는 것이 매우 간단합니다.


4
많은 개발자가 mvvm 라이브러리를 개발하는 이유가 있습니다. 만약 당신이 말하는 것이 사실이라면, 왜이 개발자들이 시간을 낭비했을까요? 이러한 프레임 워크 사용자가 왜 좋아하는 mvvm 프레임 워크를 계속 사용합니까? 사실 "Mvvm은 실제로 IMO를 지원하기 위해 전체 프레임 워크가 필요하지 않습니다". 그러나 MVVM 프레임 워크 없이는 실용적이지 않습니다.
Syaiful Nizam Yahya

3
-1 IMO는 VM 간 통신을위한 메신저 클래스와 잘 작동하는 WPF 응용 프로그램에 필요한 가장 기본적인 도구를 언급하는 IoC 컨테이너 인 ICommands에 대한 사용자 고유의 RelayCommand 클래스를 작성하는 것이 주요 PITA입니다. 귀하의 답변은 가장 간단한 프로그램에만 유효합니다.
Heliac


10

자신의 믹스!

PRISM의 EventAggregator를 MVVM Foundation의 ViewModelBase와 함께 사용했습니다. 또한 다른 데이터도 받아들이도록 RelayCommand (일부에서 호출 된 DeleteCommand)를 조정했습니다.

나는 하나의 프레임 워크 자체를 권장하지는 않습니다.


19
솔직히 동의하지 않습니다.이 접근법의 문제는 새로운 참여자를 얻을 때 드러날 것입니다. 사내 문서가 일반적으로 우선 순위가 아니기 때문에 프로젝트 참여 비용이 훨씬 높습니다.
Florian Doyon

1
문서에 대한 요점을 볼 수 있지만 사내 문서를 개발할 필요는 없습니다. 문서가있는 외부 사이트에 대한 링크는 코드 자체에 포함시킬 수 있습니다.
Vasudevan Kannan

8

내 베팅은 Caliburn과 MVVMlight에있을 것입니다.이 mvvm 프레임 워크 중 많은 것이 silverlight를 지원하지 않는 것 같습니다. mvvm 프레임 워크에 기능 경계를 설정하는 것이 더 어렵 기 때문에 IoC 프레임 워크보다 선택할 MVVM 프레임 워크가 더 많을 것으로 예상 할 수 있습니다. 어떤 기능이 목록에 있는지 비교하여 프로젝트에 더 적합한 방법을 찾는 가장 좋은 방법이라고 생각합니다.

또한 Mix10을 확인하십시오. 나는 대화에서 많은 것을 배웁니다 : 당신의 mvvm 프레임 워크 구축.


4
나는 그 이야기가 매우 유용하다는 것을 알았습니다. 직접 링크는 다음과 같습니다. live.visitmix.com/MIX10/Sessions/EX15
anshul


4

저는 프리즘을 사용하고 있습니다. 저에게있어 가장 큰 것 중 하나는 필요한 사람들과 좋은 모범을 보여줄 수있는 다른 사람들이 있다는 것입니다. 기본 사항을 실행하면 앱에 필요한 확장 기능이 많이 있으며 다른 확장 프로그램과 동일한 프레임 워크로 작업 할 때 훨씬 쉽습니다.


2

전반적으로, 나는 내 응용 프로그램을 통해 90 %이고 MVVM 툴킷을 사용한 모든 것은 Execute에서 실행할 델리게이트 함수가 주어진 명령을 작성하는 팩토리 함수입니다. 몇 시간 안에 다른 프레임 워크로 전환하거나 프레임 워크가없는 것으로 전환 할 수 있다고 생각합니다.


2

고려해야 할 또 하나는 MEFedMVVM 입니다. 나는 두 프로젝트에서 사용했으며 가볍고 방해가되지 않으며 Silverlight 및 WPF를 지원합니다. 또한 해당 제품을 사용하는 사람들을 위해 Blend에서 디자인 타임 데이터를 지원할 수 있습니다.


1

WPF / MVVM 응용 프로그램 프레임 워크 위에서 확장 성 (추가 기능을 작성하는 기능)을 찾고 있다면 SoapBox Core 면책 조항에 관심이있을 수 있습니다 . 오픈 소스이므로 사용하지 않아도 좋은 아이디어가있을 수 있습니다. 확장 성과 IoC 모두에 MEF를 사용합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.