Qual framework para MVVM devo usar?

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 são:

  • Kit de Ferramentas do MVVM
  • Fundação MVVM
  • WPF Application Framework (WAF)
  • Light MVVM
  • Caliburn
  • Cinch
  • Prisma

Na sua experiência, qual é melhor?

Isso realmente depende do que você está tentando alcançar e da quantidade de infraestrutura que você deseja no local, além da facilidade com a qual você pode encontrar amostras que o ajudam. Eu vou declarar um interesse aqui, porque eu estive ativamente envolvido em pelo menos uma estrutura de MVVM, e tive input em outros através do grupo de Discípulos do WPF, então eu sou um pouco tendencioso. Dizendo isso, aqui vai:

Kit de ferramentas do Microsoft MVM – isso ainda é muito nos estágios alfa. Quando foi originalmente lançado, levou um pouco de selvageria dos Discípulos por causa do que não fez. Dizendo isso, a MS está olhando para reforçar esse framework, então é um para assistir – ele ainda não está pronto.

MVVM Foundation – versão de ah Josh Smith do framework. Josh é um dos pais do 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 destina-se a fornecer os fundamentos 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 funcionalidade / projetos, o que significa que essa também será uma estrutura compatível com o Silverlight.

WAF – sem experiência, então não posso comentar sobre isso, estou com medo.

MVVM Light – Laurent Bugnion assumiu e apenas atualizou para a versão 2. Esse é um framework muito bom, mas novamente não se destina a cobrir todos os aspectos dos aplicativos MVVM. Dado o histórico de Laurent, ele tem um suporte muito forte ao Silverlight e ao Blendability.

Update Laurent acaba de me informar que as versões .NET 3.5 e .NET 4.0 são compatíveis com resources. Wau para ir Laurent.

Cinch – excelente framework de MVP do WPF de Sacha Barber. Isso cobre mais terreno do que os frameworks sobre os quais falamos acima. É uma estrutura excelente e aproveita os conceitos abordados no excelente projeto Onyx de Bill Kempf. O Onyx destina-se a complementar estruturas MVVM e adiciona funcionalidades que normalmente são difíceis de serem executadas pelo MVVM / WPF. Mais uma vez, originalmente concebido para ser apenas WPF, Onyx progrediu para include compatibilidade SL – trabalho que eu estou particularmente orgulhoso de ter estado envolvido em.

Prism – Mais uma vez, nunca usei, mas ouvi muitas coisas boas sobre isso.

Ocean – Karl Shifflett, Gerente de Programa da equipe Cider, lançou recentemente uma estrutura WPF MVVM com todos os resources. Mais uma vez, este é um excelente quadro e tem muito a recomendá-lo.

A linha inferior é, faça o download dos diferentes frameworks, dê uma olhada neles e descubra qual deles se encheckbox mais intuitivamente com a maneira como você pensa e com os seus requisitos. Se você acha que pode querer dar suporte ao Silverlight a partir da mesma base de código, então as estruturas somente do WPF devem ser descontadas.

Achei este artigo muito útil http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ Para trazê-lo aqui para os usuários futuros

Eu atualizo a seção Cinch e adiciono suporte ao silverlight em seus resources

Me desculpe pela longa história

Características comuns:

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

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

• Testes de unidade vêm com o quadro

Cinch

• Autor: Sacha Barber

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

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

• Hospedagem: CodePlex

• Licença: Code Open License

• Características:

  1. comportamentos anexados

  2. validação usando IDataErrorInfo

  3. suporte para IEditableObject

  4. criação e subscrição de events fracos

  5. Mensagens do mediador usando events fracos

  6. Suporte IOC / DI (usando o Unity)

  7. serviços: registrador de events, checkbox de mensagem, checkbox de diálogo de salvamento aberta, pop-up

  8. ajudantes de segmentação

  9. suporte para itens de menu

  10. modelos de visão closeable

  11. Gerador de código MVVM

Kit de ferramentas do MVVM Light

• Autor: Laurent Bugnion

• suporte Silverlight: sim

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

• Hospedagem: CodePlex

• Licença: licença MIT

• Características:

  1. Instalador MSI

  2. Modelo de projeto e item VS

  3. Snippets de código VS

  4. Sistema Messenger para comunicação entre modelos

  5. Manipulando Eventos como Comandos

Assistentes 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

• Características:

  1. comportamentos anexados

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

  3. validação baseada em atributos

  4. IOC / DI usando a abordagem ServiceProvider

  5. viewmodel closeable

  6. wait 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

• Características:

  1. Sistema Messenger para comunicação entre modelos

  2. Monitor de events 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 MIT

• Características:

  1. Os comandos são construídos sobre Ações e, portanto, compartilham muitos dos mesmos resources, incluindo vários parâmetros de input, 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 ativação, desativação e semântica de desligamento para vários componentes da interface do usuário

  3. 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 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 especificada

• Características:

  1. Padrão ServiceLocator

  2. Criação de 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 CodeProject (part1 e part2)

• Hospedagem: CodePlex

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

• Características:

  1. Gerenciador de módulos para habilitar ou desabilitar módulos em tempo de execução

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

  3. Serviço de Comando para associar o ICommands do WPF a interfaces de conteúdo que só se tornam ativas quando uma view ativa ou viewmodel implementa a interface

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

  5. Log de cliente-servidor pronto para trabalhar com out-of-the-box

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

  7. Interface com guias com indicação de arquivo sujo (reutilizável entre os 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 os links)

• Hospedagem: CodePlex

• Licença: MS-PL

• Características:

  1. suporte a comportamentos Blend3 e modelos de triggers

  2. estrutura do localizador de resources

  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 especificada

• Características:

  1. várias implementações amigáveis ​​do 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 especificada

• Características:

  1. escrito em VB.Net

  2. validação baseada em atributos

  3. classs base do viewmodel: relaycommand, closeableviewmodel…

  4. Camada de access a dados do servidor SQL

Estrutura Básica do MVVM

• Autor: Lester Lobo

• suporte Silverlight: não

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

• Hospedagem: CodePlex

• Licença: MS-PL

• Características:

  1. delegando comandos \ Keybinding

  2. mensagens entre VM’s

  3. manipulando events como comandos com comportamentos anexados

  4. manipulando diálogos (e mais) como serviços

  5. Snippets de código VS

Boa Luz

• Autor: Peter O’Hanlon • Suporte Silverlight: sim

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

• Hospedagem: CodePlex

• Licença: MS-PL

• Características:

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

  2. suporte de pele

  3. mensagens entre VM’s

Eu tento descrever os Frameworks que faltam na ótima resposta de Pete:

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

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

WPF Application Framework (WAF) é uma estrutura leve que ajuda você a criar aplicativos WPF com o MVVM. É apenas para o WPF e por isso não suporta o Silverlight. Vai um pouco de outra maneira que a maioria das outras estruturas MVVM com a introdução de controladores . Eles são responsáveis ​​pelo stream de trabalho do aplicativo e mediam entre vários ViewModels.

Meh Mvvm realmente não requer uma estrutura inteira para oferecer suporte ao IMO. Se você entende o conceito, é bastante simples começar com uma baseclass limpa da VM que implemente o INotify e vá a partir daí.

Veja também:

Caliburn & Onyx !

Misture o seu próprio!

Eu usei o EventAggregator do PRISM, com o ViewModelBase da base do MVVM e assim por diante. Eu 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 um framework em si.

minha aposta será no Caliburn e no MVVMlight, parece que muitos desses frameworks mvvm não suportam o silverlight. Eu posso prever que haverá mais estruturas MVVM para escolher do que as estruturas IoC, porque é mais difícil configurar o limite de recurso para a estrutura mvvm. Eu acho que a melhor maneira de descobrir qual deles é melhor para o seu projeto será listando / comparando seus resources.

Confira também o Mix10. Eu aprendo muito com a conversa: construindo seu framework mvvm.

Também coquetel e framework DevForce da Ideablade

Estou usando Prism e gosto disso. Uma das grandes coisas para mim foi que haveria outras pessoas por aí que poderiam me ajudar se necessário e bons exemplos. Uma vez que você tenha o básico funcionando, há um monte de extensões que você precisará para o seu aplicativo e é muito mais fácil quando você está trabalhando com o mesmo framework que os outros.

Ao todo, tenho 90% do meu aplicativo e tudo o que tenho usado do MVVM Toolkit é a function de fábrica que cria um comando para mim, dada uma function de delegação para ser executada no Execute. Acho que poderia mudar para qualquer outro framework ou framework em algumas horas.

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

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

Há também nRoute

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