Buena pregunta
viriathus, el problema es que no hay consenso al respecto, depende mucho del contexto y del tipo de aplicación, en tu ejemplo, en que contexto el objeto no es valido ?, no es valido para la persistencia, o se creo en un estado invalido ?, si se creo en un estado invalido, esto debería permitirse ?, en mi caso por lo general la validación la utilizo en el Service Layer, esto me funciona bien para aplicaciones standard's, pero en el caso de una aplicacion compleja ?, el sistema de un banco por ejemplo, seguramente tengas que hacer validaciones en diferentes niveles, desde la ui al database.
Te dejo un
link para que leas diferentes opiniones al respecto.
Saludos.