Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

JSF + Imutabilidade dos Objetos

Olá

No curso criamos a classe negociação como sendo imutável, pois uma negociação após ser realizada não pode ter seu estado alterado, e como a proposta do sistema é receber os dados de um web service converter esses dados para uma lista de objetos negociação e exibir os dados na tela, faz bastyante sentido que seja assim.

O problema é que no dia a dia geralmente os dados são provenientes de formulários preenchidos pelos usuários, vamos supor que as negociações fossem incluidas via formulário, já que o jsf usa os métodós setters para preencher os atributos do objeto teriamos problemas poisa classe negociação não tem setters, visto que é imutavel e possui apenas o construtor, se fizermos a classe negociação deixar de ser imutável, vamos ter problemas de encapsulamento, pois vamos poder alterar o estado da negociação.

Do ponto de vista prático eu iria manter a classe negociação imutável e no meu managed bean eu criaria um Value Object, NegociacaoVO e na ação de salvar eu criaria o objeto Negociacao de fato atraves do construtor copiando os dados informados no ValueObject.

O problema é que Value Objects sofrem do mesmo problema do café e do ovo, hora são hérois, ora são vilões, tem muita gente que diz pra usar e tem muita gente que diz que não. Neste caso qual seria a melhor saída?

1 resposta
solução

Oi Ricardo,

Antes de mais nada, concordo com sua solução :). Agora, só explicando um pouco mais.

Talvez alguém comente sobre a nomenclatura.. Existe literatura que dizem que um Value Object faz parte do domínio da sua aplicação, inclusive possuindo métodos de negócio e tudo mais. Alguns exemplos clássicos: class CPF, class TituloDeEleitor, class Password etc.

Nesse seu caso, pelo menos na minha opinião, a classe ta mais para um DTO. Só serve para receber e transportar os valores para outro lugar. Acho que o uso foi ótimo e muito bem contextualizado.

Gosto bastante de não quebrar o domínio por conta do framework. Óbvio, se uma solução só servir para os dois, melhor ainda.