Pergunta

Por que ir para MVVM sobre MVC ou MVP ao lidar com WPF?

Qual o benefício extra que começa usando este?

Editar:

Para ser honesto, hoje eu tive uma entrevista e eu ter sido esta pergunta. Eu respondi como INotifyPropertyChanged, ICommand, iValue conversor .. mas ele não estava satisfeito. Doravante eu ter colocado esta questão

Agradecemos antecipadamente

Foi útil?

Solução

Eu vou indicar você para um por Jason Dolinger.

Vindo de um mundo WinForms, a implementação de qualquer padrão de estilo MVX parecia ser mais incômodo do que valeu a pena, mas depois de trabalhar com WPF para um par de anos agora, posso dizer honestamente que eu não iria considerar qualquer coisa menos. todo o paradigma é suportado out-of-the-box.

Primeiro, o principal benefício é permitir verdadeira separação entre o view e model. O que isto significa em termos reais é que, se / quando as suas necessidades de modelo para a mudança, ele pode, sem o ponto de vista a necessidade de e vice-versa.

Em segundo lugar, enquanto o seu model pode conter todos os dados que você pode precisar em sua view, você pode querer abstrato que os dados de tal maneira a que o seu model não suporta. Por exemplo, digamos que seu modelo contém uma propriedade de data. No modelo que pode existir apenas como um objeto DateTime mas sua visão pode querer apresentá-lo de uma maneira completamente diferente. Sem a viewmodel você quer ter de duplicar a propriedade na model para apoiar a visão ou modificar a propriedade que poderia ofuscar seriamente o 'modelo'.

Você também pode usar um viewmodel às peças agregadas de seu modelo que existem em classes / bibliotecas separadas para facilitar uma interface mais fluente para o view de lidar. É de muito improvável que você vai querer trabalhar com dados em seu código da mesma forma que um usuário vai querer ou vai querer que os dados apresentados a eles.

Além disso, você tem suporte para dados automáticos de duas vias de ligação entre o view e viewmodel.

Não há realmente um monte de material extra que eu poderia bang sobre mas Jason dizer é ele muito melhor que eu poderia o meu conselho é assistir ao vídeo. Depois de alguns dias de trabalho como este, você vai saber como você nunca chegou sem ele.

Boa sorte.

Outras dicas

Estas são minhas específico para MVVM

  1. Aumenta a "Blendability" de seus pontos de vista (capacidade de usar o Expression Blend para vistas de projeto). Isto permite uma separação de responsabilidades em equipes que são bastante sorte de ter um designer e um programador ... cada um independente pode trabalho do outro.
  2. "Lookless" visão lógica . As vistas são agnóstico do código que corre atrás deles, permitindo que a mesma lógica de exibição para ser reutilizado em vários pontos de vista ou ter uma visão facilmente refeito ou substituído. Separa preocupações entre "comportamento" e "estilo".
  3. Sem duplicado código para vistas de atualização . No code-behind que você vai ver um monte de chamadas para "myLabel.Text = newValue" polvilhado em toda parte. Com MVVM você pode ter certeza a visão é atualizado adequadamente apenas definindo a propriedade subjacente e todos os efeitos colaterais vista dos mesmos.
  4. Testability . Desde a sua lógica é completamente agnóstico de sua vista (sem "myLabel.Text" referências), o teste de unidade é muito fácil. Você pode testar o comportamento de um ViewModel sem envolver seu ponto de vista. Este desenvolvimento permitiu também orientado a testes de comportamento vista, que é quase impossível usando o código-behind.

Os outros dois padrões são realmente tipo de separado em termos das preocupações que abordam. Você pode usar MVVM com MVP e MVC (a maioria das amostras boas lá fora, fazer algum tipo de presente).

Na verdade, MVP (w / a Ver passiva, em vez de um controlador de Supervisão) é realmente apenas uma variante do MVVM, na minha opinião.

WPF tem a melhor ligação de dados do que qualquer outro framework de interface do usuário, que MVVM seria ingovernável sem

MVVM fornece a capacidade de teste unidade e excelente vista-o agnosticismo, o que torna uma coisa boa para uso

Baked in suporte para ICommand e INotifyPropertyChanged são os dois maiores benefícios. Usando MVVM torna muito fácil de conectar-se os comandos e dados de plug para o UI WPF. As coisas simplesmente trabalho.

Eu personnaly ver MVVM não como um benefício, mas como uma obrigação para aqueles que querem usar recursos interessantes WPF.

WPF é muito fortemente construído com a ligao de dados no núcleo, para permitir a separação de UI de Modelo. Mas a forma como a ligação de dados é tecnicamente feito em WPF é um pouco especial, pois está vinculado a classes como:

  • DependencyProperty
  • INotifyPropertyChanged
  • ObservableCollection

Devido a isso você simplesmente não pode realmente escrever um modelo da maneira que quiser usando tecnologia padrão .NET. Por exemplo, o WPF TreeView é quase impossível usar w ligação e templates / S usando dados. Você simplesmente não pode preenchê-lo simplesmente como você faria a partir de um modelo genérico em WinForms por exemplo. É deve ser vinculado a um modelo hierárquico usando ObservableCollection para representar as crianças de um nó.

Então, digamos que V representa o código XAML e de code-behind contrapartida (por isso é amarrado a WPF como uma tecnologia), e vamos dizer que M representa seu modelo (para que ele não está amarrado a tecnologia WPF UI de qualquer maneira).

Bem, você nunca vai ter esse trabalho corretamente em WPF com apenas estes V & M.

Você deve acrescentar algo entre os dois. Algo que é WPF compatível e entende o seu modelo. Algo que fala DependencyProperty, ObservableCollection e INotifyPropertyChanged. Isso é o que é chamado VM.

Como uma nota lateral, uma alternativa ao MVVM é a construção de um V & M combinação (w / o encanamento VM) com M sendo WPF-compatível, mas ainda com uma independência IU razoável. Historicamente, ObservableCollection estava no WindowsBase.dll montagem (que foi enviado com WPF), para que ele realmente parecia estranho para vincular um modelo genérico para algo amarrado a uma tecnologia de interface do usuário. Tem sido volta mudou-se para System.dll desde então. Mesmo assim, às vezes é difícil manter um modelo VM pura w / o ajuste do M especificamente para WPF ...

A capacidade de código XAML para vincular, bem como a existência de gatilhos vai quebrar os padrões MVP e MVC.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top