Qual estrutura para MVVM devo usar? [fechadas]


233

Estou desenvolvendo um aplicativo com o modelo MVVM, mas cheguei a um ponto em que preciso escolher qual estrutura usar.

Entre as opções possíveis estão:

  • MVVM Toolkit
  • Fundação MVVM
  • Estrutura de aplicativos WPF (WAF)
  • Light MVVM
  • Caliburn
  • Cinch
  • Prisma
  • ReactiveUI

Na sua experiência, qual é o melhor?


14
+1 - Boa pergunta, mas por favor esclareça 'melhor'. Estruturas diferentes fornecem vantagens diferentes, o melhor depende de seus requisitos. Ansiosos para as respostas :)
Russell

Bem, seria muito bom que você possa usar com WPF e Silverlight, e com uma curva de aprendizado mínima.
Rangel

2
Você também pode querer visitar o Caliburn. codeplex.com/caliburn
Kent Boogaart

Desculpe Kent. Como eu poderia esquecer Caliburn?
Pete OHanlon 11/09/09

2
Próximo e antigo, mas ... Eu fiz meu primeiro projeto usando o Prism (resposta abaixo), pois preciso do suporte de componentes. Meu último projeto que fiz foi cru - sem estrutura alguma. Tudo o que você precisa é de uma classe de comando e você pode fazer o MVVM sem uma estrutura - isso é o mais leve possível.
dave

Respostas:


194

Realmente depende do que você está tentando alcançar e da quantidade de infraestrutura que você já deseja instalar, além da facilidade com a qual você pode encontrar amostras que o ajudam. Vou declarar interesse aqui, porque estive ativamente envolvido em pelo menos uma estrutura MVVM e tive contribuições para outras pessoas através do grupo WPF Disciples, por isso sou um pouco tendenciosa. Dizendo isso, aqui vai:

Microsofts MVVM Toolkit - isso ainda está nos estágios alfa. Quando foi lançado originalmente, foi necessário um pouco de discórdia entre os discípulos por causa do que não fez. Dizendo isso, a MS está procurando reforçar esse quadro, por isso é preciso observar - ainda não está pronto.

Fundação MVVM - ah versão do framework de Josh Smith. Josh é um dos pais da MVVM e tem sido um grande defensor e professor do padrão. Como resultado, muito do que você encontrará em outras estruturas tem as impressões digitais de Josh por toda parte. Essa estrutura visa fornecer os conceitos básicos do MVVM, e não abordar alguns dos problemas mais esotéricos. Originalmente, isso era destinado apenas ao WPF, mas pessoas como Laurent Bugnion e eu adicionamos funcionalidades / projetos que significam que isso também será uma estrutura compatível com o Silverlight.

WAF - nenhuma experiência com isso, então não posso comentar sobre isso.

MVVM Light - a opinião de Laurent Bugnion e atualizada para a versão 2. Essa é uma estrutura muito boa, mas, novamente, não se destina a cobrir todos os aspectos dos aplicativos MVVM. Dado o histórico de Laurent, ele possui um forte suporte ao Silverlight e Blendability.

Atualização Laurent acabou de me informar que as versões .NET 3.5 e .NET 4.0 são compatíveis com os recursos. Como ir Laurent.

Cinch - excelente estrutura MVVM WPF do Sacha Barber. Isso cobre mais terreno do que as estruturas de que falei acima. É uma excelente estrutura e tira proveito dos conceitos abordados no excelente projeto Onyx de Bill Kempf . O Onyx destina-se a complementar as estruturas MVVM e adiciona funcionalidade que normalmente é difícil para as pessoas fazerem no MVVM / WPF. Novamente, originalmente destinado a ser apenas WPF, o Onyx progrediu para incluir a compatibilidade com o SL - trabalho no qual estou particularmente orgulhoso de ter participado.

Prisma - Mais uma vez, nunca o usei, mas ouvi muitas coisas boas sobre isso.

Ocean - Karl Shifflett, gerente de programas da equipe Cider, lançou recentemente uma estrutura MVPM do WPF com todos os recursos. Novamente, essa é uma excelente estrutura e tem muito a recomendar.

A conclusão é que, faça o download das diferentes estruturas, dê uma olhada nelas e determine qual delas se encaixa mais intuitivamente com a maneira como você pensa e com seus requisitos. Se você acha que talvez queira oferecer suporte ao Silverlight a partir da mesma base de código, as estruturas somente do WPF devem ser descontadas.


4
Eu uso um que escrevemos, porque temos necessidades muito especializadas para MVVM. É fortemente influenciado pelo trabalho que Josh fez, e eu o lançarei como código aberto em um futuro próximo (estou ocupado rasgando os bits proprietários). Chama-se Goldlight.
Pete OHanlon 11/09/09

Junto com isso, qual é a estrutura da camada de acesso a dados? pessoal .. LINQ, LLBLGen, EF, nHibernate?
Jirapong 11/09/09

Depende do projeto e dos requisitos. Às vezes usamos LINQ, às vezes NHibernate, às vezes Castle ActiveRecord e às vezes eXpress Persistent Objects.
Pete OHanlon 11/09/09

3
Olá Pete, só quero comentar que o MVVM Light Toolkit funciona da mesma forma para o WPF 3.5 e WPF 4 e para o Silverlight 3 e Silverlight 4. Tenho o cuidado de manter os recursos sincronizados o máximo possível. Você está certo sobre o blendability porém, esta é uma grande preocupação para mim :) Cheers, Laurent
LBugnion

1
Fiquei desapontado por o MVVM Toolkit não ter sido atualizado para funcionar com o Visual Studio 2010. Talvez queira adicionar isso ao processo de tomada de decisão. A maioria das pessoas que conheço usando modelos MVVM em 2010 está usando MVVM Light e algumas migraram para isso apenas por esse motivo.
ScottCher

54

Achei este artigo muito útil http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ Para que eu o traga aqui para usuários futuros

Atualizo a seção Cinch e adiciono suporte ao silverlight a seus recursos

Me desculpe pela longa história

Características comuns:

• Classe ViewModelBase (para a implementação da interface INotifyPropertyChanged)

• RelayCommand como classe para vincular o comando da interface do usuário aos manipuladores do ViewModel

• Os testes de unidade vêm com a estrutura

Cinch

• Autor: Sacha Barber

• Suporte ao Silverlight: não (o Cinch versão 2 suporta o Silverlight)

• Documentação: excelente, 6 artigos publicados no CodeProject

• Hospedagem: CodePlex

• Licença: Licença aberta do projeto de código

• Recursos:

  1. comportamentos associados

  2. validação usando IDataErrorInfo

  3. suporte para IEditableObject

  4. criação e assinatura de eventos fracos

  5. mensagem do mediador usando eventos fracos

  6. Suporte do COI / DI (usando o Unity)

  7. Serviços: registrador de eventos, caixa de mensagem, caixa de diálogo Salvar, pop-up

  8. rosqueando ajudantes

  9. suporte para itens de menu

  10. modelos de vista fechada

  11. Gerador de código MVVM

MVVM Light Toolkit

• Autor: Laurent Bugnion

• Suporte Silverlight: sim

• Documentação: muitos artigos disponíveis no blog da Laurent e outros desenvolvedores também

• Hospedagem: CodePlex

• Licença: licença do MIT

• Recursos:

  1. Instalador MSI

  2. Projeto VS e modelo de item

  3. Fragmentos de código VS

  4. Sistema Messenger para comunicação entre modelos

  5. Manipulando Eventos como Comandos

Auxiliares do MVVM

• Autor: Mark Smith

• Suporte Silverlight: não

• Documentação: alguns artigos no blog de Mark

• Hospedagem: site pessoal

• Licença: não definida

• Recursos:

  1. comportamentos associados

  2. criação de viewmodel usando extensão de marcação

  3. validação baseada em atributos

  4. COI / DI usando a abordagem ServiceProvider

  5. modelo de vista fechada

  6. aguarde o cursor (usando o novo WaitCursor () {// seu código aqui})

Fundação MVVM

• Autor: Josh Smith

• Suporte Silverlight: não

• Documentação: artigos sobre a implementação do Messenger no blog de Josh ou Marlon Grech

• Hospedagem: CodePlex

• Licença: MS-PL

• Recursos:

  1. Sistema Messenger para comunicação entre modelos

  2. Monitor de eventos PropertyChanged

Caliburn

• Autor: Rob Eisenberg

• Suporte Silverlight: sim

• Documentação: documentação on-line completa disponível

• Hospedagem: CodePlex http://www.codeplex.com/caliburn

• Licença: licença do MIT

• Recursos:

  1. Os comandos são criados sobre ações e, portanto, compartilham muitos dos mesmos recursos, incluindo vários parâmetros de entrada, filtros e execução assíncrona automática

  2. apresentadores que lidam com problemas de ciclo de vida da interface do usuário, como manipulação de semântica de ativação, desativação e desligamento de vários componentes da interface do usuário

  3. As aplicações Caliburn são totalmente testáveis

  4. vários utilitários, como um gerenciador de tarefas em segundo plano

  5. suporta vários padrões de interface do usuário (não apenas o MVVM)

  6. recipiente de injeção de dependência

Ônix

• Autor: William e Kempf

• Suporte Silverlight: não

• Documentação: introdução básica disponível no CodePlex

• Hospedagem: CodePlex

• Licença: não especificado

• Recursos:

  1. Padrão ServiceLocator

  2. Criação do ViewModel usando uma extensão de marcação personalizada

  3. Serviços relacionados à interface do usuário, como IDisplayMessage

Cálcio

• Autor: Daniel Vaughan

• Suporte Silverlight: não

• Documentação: 2 artigos muito detalhados sobre o CodeProject (parte1 e parte2)

• Hospedagem: CodePlex

• Licença: use, copie, modifique e / ou distribua e mantenha os direitos autorais!

• Recursos:

  1. Gerenciador de módulos para ativar ou desativar módulos em tempo de execução

  2. serviços de mensagens para interagir com o usuário do cliente ou servidor usando a mesma API

  3. Serviço de Comando para associar WPF ICommands a interfaces de conteúdo que somente se tornam ativas quando uma exibição ou modelo de exibição ativo implementa a interface

  4. Adaptadores de região para barras de ferramentas e menus

  5. Log do cliente-servidor pronto para funcionar imediatamente

  6. Inclui módulos, como um navegador da Web, um editor de texto, uma janela de saída e muito mais

  7. Interface com guias com indicação de arquivo sujo (reutilizável em módulos)

nRoute

• Autor: Rishi

• Suporte Silverlight: sim

• Documentação: muitos artigos disponíveis no blog do autor (consulte a home page do projeto CodePlex para obter os links)

• Hospedagem: CodePlex

• Licença: MS-PL

• Recursos:

  1. suporta comportamentos do Blend3 e aciona modelos

  2. estrutura do localizador de recursos

  3. ver serviços: OpenFileDialog, ShowMessage…

  4. usa atributos para mapear View e ViewModel juntos

Nito MVVM

• Autor: Shammah

• Suporte Silverlight: não

• Documentação: não

• Hospedagem: CodePlex

• Licença: não especificado

• Recursos:

  1. várias implementações amigáveis ​​ao MVVM da interface ICommand

oceano

• Autor: Karl Shifflet

• Suporte Silverlight: não

• Documentação: artigos disponíveis no blog de Karl

• Hospedagem: site pessoal

• Licença: não especificado

• Recursos:

  1. escrito em VB.Net

  2. validação baseada em atributo

  3. classes base do viewmodel: relaycommand, closeableviewmodel…

  4. Camada de acesso a dados do servidor SQL

Estrutura básica do MVVM

• Autor: Lester Lobo

• Suporte Silverlight: não

• Documentação: aplicativo de amostra disponível na biblioteca

• Hospedagem: CodePlex

• Licença: MS-PL

• Recursos:

  1. delegando Commands \ Keybinding

  2. mensagens entre VMs

  3. manipulando eventos como comandos com comportamentos anexados

  4. manipulação de diálogos (e mais) como serviços

  5. Fragmentos de código VS

Boa Luz

• Autor: Peter O'Hanlon • Suporte ao Silverlight: sim

• Documentação: aplicativo de amostra disponível na biblioteca

• Hospedagem: CodePlex

• Licença: MS-PL

• Recursos:

  1. Gerenciamento de "espaço de trabalho" (conjunto de documentos que podem ser fechados)

  2. suporte de pele

  3. mensagens entre VMs


Ótimo post. Pensei em acrescentar que o Cinch versão 2 suporta o Silverlight.
Kildareflare

44

Tento descrever as estruturas ausentes na grande resposta de Pete:

O MVVM Toolkit (Microsoft) é uma biblioteca muito leve com modelos de projeto do Visual Studio que deve oferecer suporte a iniciantes com esse padrão. Se a Microsoft receber um bom feedback para o Toolkit, poderá implementá-lo como um novo modelo de projeto do Visual Studio (talvez 2010).

O Prism (Microsoft p & p) é uma estrutura que fornece mais do que o suporte ao padrão MVVM. O principal objetivo deste projeto é ajudá-lo a criaraplicativos modulares WPF e / ou Silverlight. Quando você só precisa implementar o padrão MVVM ou é iniciante no .NET / WPF, não recomendarei este projeto. Veja também: Link .

O WPF Application Framework (WAF) é uma estrutura leve que ajuda você a criar aplicativos WPF com o MVVM. É apenas para WPF e, portanto, não suporta o Silverlight. É um pouco diferente do que a maioria das outras estruturas MVVM com a introdução dos Controladores . Eles são responsáveis ​​pelo fluxo de trabalho do aplicativo e mediam entre vários ViewModels.


19

Meh. O Mvvm não exige realmente uma estrutura inteira para suportar o IMO. Se você entendeu o conceito, é bastante simples começar com uma classe básica de VM limpa que implemente o INotify e seguir em frente.


4
Há uma razão pela qual muitos desenvolvedores desenvolvem a biblioteca mvvm. Se o que você diz é verdade, por que esses desenvolvedores desperdiçam seu tempo? Por que os usuários dessas estruturas continuariam usando sua estrutura mvvm favorita? É verdade que "o Mvvm não exige realmente uma estrutura inteira para suportar o IMO". Mas não é prático prescindir da estrutura MVVM.
Syaiful Nizam Yahya

3
-1 A IMO que escreve sua própria classe RelayCommand para ICommands, uma classe Messenger para comunicação entre VMs e seu próprio contêiner de IoC para mencionar apenas as ferramentas mais básicas necessárias para um aplicativo WPF que funcione bem, é uma das principais PITA. Sua resposta é válida apenas para o mais simples dos programas.
Heliac


10

Misture o seu!

Eu usei EventAggregator do PRISM, com ViewModelBase da MVVM Foundation e assim por diante. Também ajustei o RelayCommand (DelegateCommand chamado em alguns lugares) para aceitar outros dados também e assim por diante.

Eu não recomendaria apenas uma estrutura em si.


19
Discordo respeitosamente, o problema com essa abordagem se revelará quando você conseguir novos ingressantes - o custo de entrada no projeto será muito maior, pois os documentos internos geralmente não são a prioridade.
Florian Doyon

1
Eu posso ver o ponto sobre documentation.But pode não haver uma necessidade de desenvolver docs.Links in-house para os sites externos com a documentação pode ser incorporado no próprio código
Vasudevan Kannan

8

minha aposta será em Caliburn e MVVMlight, parece que muitas dessas estruturas mvvm suportam o silverlight. Posso prever que haverá mais estruturas MVVM para escolher do que as estruturas IoC, porque é mais difícil configurar o limite do recurso para a estrutura mvvm. Eu acho que a melhor maneira de descobrir qual é o mais adequado ao seu projeto será listando / comparando seus recursos.

Verifique também o Mix10. Aprendo muito com a palestra: construindo sua estrutura mvvm.


4
Achei essa conversa bastante útil. Aqui está um link direto: live.visitmix.com/MIX10/Sessions/EX15
anshul


4

Estou usando o Prism e gosto. Uma das grandes coisas para mim foi que haveria outras pessoas por aí que poderiam me ajudar se necessário e bons exemplos. Depois de executar o básico, existem várias extensões necessárias para o seu aplicativo e fica muito mais fácil quando você trabalha com a mesma estrutura que outras.


2

No geral, estou 90% com meu aplicativo e tudo o que usei do MVVM Toolkit é a função de fábrica que cria um comando para mim, com uma função delegada a ser iniciada no Execute. Eu acho que poderia mudar para qualquer outra estrutura ou nenhuma estrutura em algumas horas.


2

Outro ponto a considerar é o MEFedMVVM . Eu o usei em alguns projetos e é leve, não intrusivo e suporta Silverlight e WPF. Também é capaz de suportar dados em tempo de design no Blend, para aqueles que usam esse produto.


1

Se você está procurando Extensibilidade (a capacidade de escrever suplementos) sobre uma estrutura de aplicativo WPF / MVVM, pode estar interessado no aviso de isenção do SoapBox Core : eu escrevi . É de código aberto, portanto, mesmo que você não o use, pode haver algumas boas idéias para você. Ele usa o MEF para Extensibilidade e IoC.


1

Há também nRoute

Uma estrutura de aplicativo realmente boa para WPF / Silverlight que suporta MVVM

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.