Eu tenho a preocupação de, sempre que possivel, nao deixar um objeto ser instanciado em estado inconsistente. Ou seja, procuro passar no construtor, tudo que o objeto necessita para existir com integridade, garantindo assim que ele nao vai ser persistido num estado invalido.
O mesmo serve para uma mudança de estado, pra mudar do estado A para o B, é necessário que ele realmente esteja no A e que tudo que for preciso pra ele chegar no B seja feito dentro de uma unica operacao, ou ele nao sai do A.
Até aí tudo bem, nada de novo.
Em frameworks como grails e rails eu posso por validadores na propria entidade, sem problemas, mas ainda assim ha a mudanca de estados. Em java, em frameworks como VRaptor, ou até mesmo JSF, quando a propria entidade eh utilizada na view eu necessariamente preciso por metodos sets, deixando em alguns momentos meus objetos em estado invalido.
Depois tenho que espalhar validadores, validar antes de salvar, validar ao receber os valores da view, validar aqui e validar ali, e numa dessas escapa algo que nao escaparia da outra forma e vai meu objeto ser gravado de forma insconsistente.
A minha duvida é: estou sendo muito purista? Eu estou usando essas ferramentas de forma errada e há uma forma que eu nao conheco de nao usar sets desnecessarios? Essa nova forma de expor os objetos na view diretamente nao está quebrando o principio basico do encapsulamento do qual tanto ouvimos falar quando estudamos os principios basicos OO?