Melhor forma de validação

Estou com uma certa dúvida ao desenvolver projetos, qual a forma mais limpa de validar os dados de input dos usuários?

  • A view? (acho improvável)
  • O Controller?
  • O Bean ao receber um valor deve lançar uma exception?
  • O BD através de CONSTRAINTs?