Pergunta

Onde deve validação residem ao usar ViewModels com MVC (MVVM), no Modelo ou ViewModel? (Ou ambos ou nenhum)? E porque? Eu trago este acima especialmente à luz da V2 da ASP.NET MVC a sair em breve.

O que sobre a validação / custom complexo?

Foi útil?

Solução

Qualquer validação específica de negócios deve ser no Modelo. Qualquer validação específica web site pode ser feito tanto no modelo e / ou ViewModel. Desta forma, sua lógica de negócios (Models) pode mover-se atrás de uma interface diferente (Windows, Web Forms, etc.) e sua validação irá permanecer intacta.

Outras dicas

Eu diria que é muitas vezes necessária para validar a todos os níveis:)

Eu estava pensando um pouco sobre seguinte:

  1. validação de entrada do usuário: definitivamente no controlador, não em qualquer tipo de modelo. Exemplo:. captcha
  2. Ver relacionado dados validados sobre o ViewModel (não no ViewModel, mas na ViewModel). Exemplos:. Confirmação de senha , Obrigatório E-mail
  3. validação de regras de negócios definitivamente vai para validação do modelo. Exemplos:. Obrigatório E-mail , cupão de desconto deve ser válido
  4. Potencialmente de Caso de Uso (história, cenário etc.) validação. Ele não valida os atributos, mas valida a correção de todo o processo. Deve ir para a validação do modelo (ou melhor, em uma camada separada). Exemplo: Apenas 3 itens podem ser obtidos gratuitamente durante uma semana, se nenhuma ordem foi colocar para o período determinado .

NOTA: Eu incluiu o Obrigatório E-mail em ambos os 2 e 3, uma vez que muitas vezes depende de onde ele pertence
. Se o e-mail desempenha apenas papel informativo - em seguida, a validação pode ser relaxada e empurrá-lo para o modelo de exibição. Se Email é um forte requisito para a aplicação - é definitivamente validação do modelo.

A 4ª coisa tem realmente nada a ver com a validação como a entendemos.
Mas também deve ser aplicada. Assim, o resultado deve ser exibido para o usuário.

Basicamente todos os 4 tipos de validação pode usar a mesma infra-estrutura. Mas a implementação depende:) ...

Cheers,
Dmitriy.

Modelo. Sua validação deve estar em sua camada de negócios. Seu modelo de vista deve ser apenas para obter sua configuração de exibição.

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