Pessoal, com o tempo eu venho testando diferentes maneiras de realizar validação dos dados para determinada execução de um método de negócio ou funcionalidade semelhante. Em projetos anteriores ao asp.net mvc u já passei pelos seguintes modelos:

 

Validação apenas no client side
Este modelo é inviável para uma aplicação enterprise, pois toda a regra de execução está no layout, se uma nova interface fosse criada regras teriam que ser copiadas e adicionadas ao novo projeto. Com o tempo aprendi que a validação client-side(app web) é apenas para melhorar a interação do cliente com a aplicação e que uma validação no lado servidor é necessária para segurança da aplicação.

Validação client-side e server side
Desta maneira temos a validação client-side para melhorar a interface com o usuário e ainda temos a validação do lado servidor capaz de validar a execução. Neste modelo a validação server side pode ser reaproveitada em outros projetos de interface. No entanto já tive problemas com duplicação de código de validação que era difícil de manter.

Validação client-side e server side *(usando façades)
Usando o último modelo decidi por criar uma camada de validação usando um Validation facade, tentando assim isolar código de validação da minha regra de negócio efetivamente. Cheguei a usar com sucesso o modelo de validação até que chegou a integração asp.net mvc+ data annotations

Validação usando Data annotations(client side e server side)
Usando data annotations é possível manter informações de validação na propria entidade(classe) e ainda reaproveitar o código tanto para client-side  e server side. Ai tudo parecia perfeito! mas e quando eu criar um novo projeto de interface sem suporte ao data annotations? deveria escrever um código para funcionar com data annotations em outra interface como uma app WCF. então..

Validação usando Data annotations+ enterprise library 5.0
A versão 5.0 do enterprise library tem suporte ao data annotations, então agora poderia reaproveitar o data annotations para projetos mvc usando a estrutura que já existe e ainda poderia usar data annotations em outras interfaces através do entlib e ter a mesma qualidade /padrão de informar dados inválidos(nome do campo+mensagem). E se quiser poderia usar a validação do mvc com o entlib.

Novo modelo proposto com Data annotations + enterprise library 5.0 + code contracts
Estou na fase de definição do modelo de validação de um novo projeto, estou pensando em adotar o último modelo adotado quando estiver trabalhando com métodos que recebem entidades como parâmetros que podem ser validadas. Nos casos de métodos que apenas recebem parâmetros vou usar code contracts para definir e alertar quais validações devem ser realizadas para a execução ocorrer com sucesso.

Questões sobre o modelo proposto

Eu ainda estou estudando algumas opções neste modelo, o que fazer por exemplo quando o usuário passa uma  id que deveria ser da tabela pessoa e o ID não existe? a interface de usuário deveria possibilitar a seleção correta do id? como o negócio deveria se comportar? lançando uma exceção?