Quali sono i vantaggi dell'utilizzo di proxy di runtime con un provider ORM come Hibernate o EclipseLink rispetto alla strumentazione / miglioramento del codice?
So che la strumentazione bytecode aiuta a ottimizzare il controllo sporco. Poiché è in grado di intercettare le modifiche, il provider ORM non ha bisogno di attraversare tutti gli oggetti nel contesto di persistenza e confrontare i valori correnti con lo snapshot eseguito quando gli oggetti sono stati caricati (evitando così anche il consumo di memoria aggiuntivo, presumo).
Inoltre, so che può essere d'aiuto in situazioni in cui devono essere eseguite ulteriori query perché il provider ORM non sa se è necessario creare un proxy o quale sia il valore della chiave primaria nel proxy, come in < a href="https://stackoverflow.com/questions/1444227/making-a-onetoone-relation-lazy"> lazy one-to-one associazioni, rendendo così le associazioni effettivamente ansiose in alcune situazioni.
Alcune altre insidie del proxy sono state descritte in questo blog , come accesso diretto al campo (in equals
e hashCode
metodi) e utilizzo di instanceof
operatore.
Mi sembra che la strumentazione bytecode sia un'alternativa migliore. Ha qualche insidia propria rispetto all'approccio dei proxy di runtime? C'è qualche regola empirica da seguire quando si sceglie l'uno invece dell'altro?