Mudança de estado de um objeto

Caros amigos,

Gostaria de saber como posso descobrir quando o estado de um objeto foi alterado sem necessidade que o design do objeto observado seja dirigido com este objetivo, como no caso da utilizacao do pattern observer.

Gostaria de observar qualquer objeto, mesmo que o mesmo não tenha sido escrito originalmente com o objetivo de notificar alguem quando seu estado é alterado.

Agradeço antecipadamente!

Carlos

AOP ou Proxies

IoC

Como :?:

Ok,

Na hipótese de utilização de AOP ou Proxies seriam necessários a utilização de métodos setter/getter para que a mudança de estado do objeto seja percebida… estou certo?

No caso de IoC, eu não conheço, mas pelo pouco que li parece ser uma idéia muito interessante!

Sim, mas como um objeto mudaria seu estado se não for através de uma chamada a um método (e não um método set necessariamente)?

Vocês podem me explicar como IoC poderia ajudar nisso? Não faz sentido para mim.

Enviada: 04/08/2005 08:48:39 Assunto:


Caros amigos,

Agradeço muito suas sugestões, mas gostaria de aprofundar um pouco algumas idéias sugeridas.

Quanto a utilização de proxy: a minha idéia inicial era realmente utilizá-los mas ainda nao tenho muito claro como iria identificar a alteracao de estado do objeto… uma idéia seria, de alguma forma, antes da chamada de qualquer método do objeto, o proxy iria salvar o estado do objeto e quando o controle retornasse do objeto para o proxy, o estado do objeto seria comparado com o estado que o proxy havia registrado quando da entrada no método… se houvessem diferenças seria detectado a mudança de estado.

Gostaria esta idéia com vocês… de que forma ela poderia ser melhorada?

Reimer

Ao criar o objeto você pode guardar uma cópia do estado interno dele, dentro dele mesmo. Procure por memento.

Então depois perguntaria myDearObject.areYouDirty()? Que compararia o estado antes e depois.

Um potencial problema é o gasto de memória duplicado.

Bom, outra forma que poderia utilizar para detectar qual dos atributos do objeto foi alterado, seria através do empacotamento dos métodos setter em proxies e derivar o nome do atributo sendo alterado através do nome do método setter que está sendo usado.

Mas neste caso todos os atributos passíveis de modificação deveriam ter seu respectivo setter.

O que vocês acham desta alternativa?

Implementei isso utilizando AOP pois, como expliquei em outro post, a criação de Proxies é um tanto lenta. Faça o teste! :smiley:

Lipe,

Valeu pela dica!!!

Vou fazer um comparativo…

De qualquer forma acredito que vou utilizar proxies mesmo… já que o importante aqui é a idéia…