Pergunta

Eu não estou interessado nas respostas relativas à validação do lado do cliente ou modelo de ligação. Realmente, esta questão poderia se aplicar a qualquer fora acesso a dados biblioteca de classes do MVC, mas as questões são semelhantes, eu acho.

Eu estou usando o padrão Repository atualmente para acesso a dados com os meus entidades (modelos). Atualmente, os repositórios de lidar com todas as operações CRUD, mas eu acho que eu gostaria que meus modelos a ser responsáveis ??por si mesmos poupança, a fim de fazer a validação. Como devo lidar com isso?

Eu poderia adicionar um método IsValid em meus modelos que os repositórios poderia chamar, que poderia executar toda a minha lógica de negócios antes do repositório salva o modelo, mas então nada obriga o repositórios de chamar essa lógica de validação, certo?

Se eu quiser os modelos de ter um método Save, então o que é a maneira correta para eles para salvar-se? Eles não deve chamar de volta até o Repositório deveriam?

Quaisquer pensamentos sobre como devo lidar com isso?

Obrigado!

Foi útil?

Solução

Não há nada de intrinsecamente errado com permitindo que o modelo para validar operações de gravação; é ainda viável para retornar falsa ou lançar uma exceção. A dificuldade surge quando você deve, então, fornecer feedback para o usuário a respeito de porque os seus dados digitado não é válido.

A validação pode e deve ocorrer na vista em primeiro lugar. Isto pode facilmente ser do lado do cliente feito usando bibliotecas jQuery. Mas os dados ainda devem ser validados server-side após os submete usuário, e se ainda há problemas com os dados, você ainda deve fornecer uma explicação para o usuário.

Por causa da necessidade de fornecer feedback do usuário, a validação do lado do servidor desse tipo pode ser efetivamente fornecido em um Model View objeto. Este objecto de dados serve para dois fins: em primeiro lugar, que encapsula os dados que passa entre o ponto de vista e o controlador de um objecto de rigidez. Em segundo lugar, ele fornece um local conveniente para executar a validação, sem a necessidade lógica de validação em qualquer controlador ou a vista.

Se o LINQ to SQL é usado, o Model View pode ser uma extensão da actual classe de modelo de dados, usando a palavra-chave parcial em C #. Isso permite que você use os recursos ORM existentes do LINQ to SQL classe gerada, enquanto aderência na funcionalidade de validação adicional. Presumo que isso funciona da mesma maneira no Entity Framework, e outros ORMs.

Ver modelos estão descritos no tutorial NerdDinner aqui: http://nerddinnerbook.s3.amazonaws.com/Part6.htm

O processo de validação é descrito aqui:
http://nerddinnerbook.s3.amazonaws.com/Part3.htm

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