[quote=mochuara][quote=x@ndy]
Um Objeto Valor pode conter Entidades porque mesmo que os atributos das entidades variem, elas continuam sendo sempre a mesma entidade pois sua identidade não muda. Uma rodovia não passa a ser uma nova rodovia por que deixou de ter 3 pistas para ter 6, a identidade dela continua sendo a mesma! Assim eu não quebro Imutabilidade.
[/quote]
Isso não é verdade, como bem observou o esmiralha.
[/quote]
O que o colega esmiralha colocou é uma coisa que eu já tinha falado com edufa e vou colocar aqui de novo:
“Claro, e isso é óbvio, que se algum atributo da entidade for importante para o Objeto Valor de modo que, se for alterado, possa quebrar uma de suas invariantes, então não posso utilizar uma referência e terei que ter uma cópia dessa entidade. Também não posso permitir que essa cópia seja alterada se eu compartilhar uma referência do meu Objeto Valor!”
Não posso afirmar que o colega esmiralha tenha concordo, mas creio que sim, já que não questionou minha colocação.
[quote=mochuara][quote=x@ndy]
Isso não contradiz o quote de cima e vai de encontro ao que estou dizendo, usar o código como referencia e não o proprio objeto?[/quote][/quote]
Desculpe mas não entendi sua colocação. Pode explicar melhor?
Dando continuidade, me corrija se eu estiver enganado, mas o primeiro problema que eu vejo com seu ponto de vista é que você acredita que um OBJETO VALOR tem que ser obrigatoriamente imutável, o que está errado! O objeto valor tem que ser imutável apenas se for compartilhada uma referencia sua com outro objeto! Se eu não quiser, ou não puder torná-lo imutável e desejar compartilha-lo, posso fazer isso mediante uma cópia do mesmo! E se esse OBJETO VALOR não for compartilhado não é necessário sequer torná-lo imutável (não que isso não seja uma boa prática)
A segundo problema que vejo também é com o conceito de identidade e associação de objetos! Pelo que entendi até agora e com base na sua primeira colocação, no seu ponto de vista, o OBJETO VALOR é mutável quando possui uma referência para uma ENTIDADE pois os atributos desta podem mudar independentemente do OBJETO VALOR.
Com certeza os atributos da ENTIDADE podem mudar, mas isso não quer dizer que um OBJETO VALOR seja mutavel por causa disso. Se as invariantes do objeto valor dependerem apenas da identidade de uma ENTIDADE então ele pode ter uma referencia para a ENTIDADE sim, já que identidade da ENTIDADE nunca muda. Se eu necessitar compartilhar esse objeto valor, posso torna-lo imutável também, pois o que tenho que garantir é que nenhuma das suas invariantes seja quebrada e se as invariantes dependem apenas da identidade da minha ENTIDADE então o que devo fazer é não permitir que seja atribuído ao OBJETO VALOR uma referencia para uma outra ENTIDADE.
O que vejo é uma grande confusão com relação as invariantes de um objeto. Como disse antes, não é por uma rodovia recebe mais pistas mais que ela deixa de ser a mesma rodovia, muito menos uma rota vai ser alterada se essa rodovia receber mais pistas. Agora se a rota depende de algum atributo dessa rodovia, digamos de um acesso, então não devemos permitir que essa rodovia mude, pois se mudar vai quebrar uma invariante do meu objeto rota tornando o mesmo inválido. Como a rodovia é uma ENTIDADE para compartilha-la devemos então fornecer para a rota uma copia do objeto rodovia e não devemos permitir que os atributos dessa cópia sejam alterados.
Agora o que não entendo mesmo, é que você teima que estou errado mas não diz por que! Me diga aonde estou errando e com base no que?