Pergunta

Estou trabalhando em um aplicativo WPF e estou estruturando -o usando o padrão MVVM. Inicialmente, tive uma ideia de que os modelos do ViewModels devem ser reutilizáveis, mas agora não tenho mais certeza.

  • Devo ser capaz de reutilizar meus modelos ViewModels se eu precisar de funcionalidade semelhante para um aplicativo WinForms?
  • O Silverlight não suporta todas as coisas que o WPF faz - devo ser capaz de reutilizar as aplicações Silverlight?
  • E se eu quiser fazer uma GUI do Linux para minha aplicação. Então eu preciso do ViewModel para construir em Mono - isso é algo pelo qual devo lutar?
  • E assim por diante..

Então; Deve -se escrever aulas de viewmodel com uma visão específica em mente ou pensar em reutilização?

Foi útil?

Solução

Para responder à sua pergunta, pense no princípio de responsabilidade única:

"Uma aula deve ter uma, e apenas uma das razões para mudar."

Eu diria que, dentro da razão, você normalmente não quer reutilizar um ViewModel para várias visualizações. A principal razão pela qual eu argumentaria por isso é porque isso daria ao seu viewmodel mais de um motivo para mudar. Em outras palavras, precisaria mudar se uma ou outra visão mudar e, na minha opinião, são duas razões para mudar. Onde isso para? Eu o mantinha simples neste caso e ligaria um viewmodel à vista.

Outra coisa em que pensar com o MVVM com o WPF é o modelo de dados. É muito mais fácil realizar se cada ViewModel atender a uma e apenas uma visão.

Outras dicas

Em geral, aplique o princípio Yagni - você provavelmente não precisará dele. A menos que você possa ver essas coisas como potencialmente acontecendo, eu manteria a abordagem mais simples para fazer com que seu software funcione para os requisitos que você possui atualmente.

Em minha mente, O principal objetivo do MVVM é eliminar o código que não pode ser facilmente testado por testes de unidade. Como um modelo de visualização pode ser testado na unidade, mas uma visualização não pode, isso é alcançado, tornando a visualização o mais burra possível. Idealmente, como pode ser feito com XAML, a visualização é completamente declarativa e apenas os dados de dados em um modelo de visualização. Daí o mantra "sem código por trás".

A reutilização do modelo de visualização em diferentes tecnologias de interface do usuário não é realmente um objetivo do MVVM. Se você tentar, provavelmente ficará tentado a mover o código específico para a tecnologia da interface do usuário para a visualização novamente para manter o modelo de exibição reutilizável. Isso iria contra o principal objetivo da testabilidade.

Se você realmente precisar suportar diferentes tecnologias de interface do usuário, ainda poderá levar em consideração a lógica comum dos modelos de visualização em uma camada de "apresentação" compartilhada. Eu não faria isso até ter certeza de que é necessário.

Esta é uma pergunta antiga, por isso hesito em adicionar outra resposta. Mas todas as respostas postadas até agora perderam o ponto. A resposta do msdn é muito claro: o ViewModel destina -se muito especificamente a ser compartilhado por muitas visualizações em vários OSS, como demonstrado nesta figura:

enter image description here

Fazer o contrário levaria inevitavelmente a um código redundante.

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