ActiveRecordContext

Bonjour tout le monde.

Y a un truc qui est vraiment pas mal je trouve dans DataMapper (un
concurrent à ActiveRecord populaire du côté de Merb), c’est ce qu’ils
appellent l’identity map :
http://www.datamapper.org/why.html

L’idée c’est que si on fait plusieurs fois un find(id) sur la même
classe, on obtient le même objet.
C’est pas mal, notamment quand avec les associations on part voir un
autre objet, puis on remonte vers l’objet parent :

Car.has_many wheels

si on fait my_car.wheels.first.car on ne retombe pas sur l’objet
my_car avec ActiveRecord :
on a bien my_car == my_car.wheels.first.car,
mais pas my_car.object_id == my_car.wheels.first.car.object_id
Et surtout, ça retourne chercher l’objet en base de donnée, alors
qu’il a déjà été
chargé.
J’ai l’impression que le plugin ActiveRecordContext se rapproche pas
mal de ça.
GitHub - technoweenie/active_record_context: simple identity map for active record. eager loading associations FTL

Quelqu’un a déjà essayé ?
Je vois pas tellement les inconvénients que ça peut avoir (à part un
problème de performance quand on charge plein d’ActiveRecord
différents ?)


Arthur

Arthur Pétry a écrit :

Oui, c’est ce que fait ActiveRecordContext

Quelqu’un a déjà essayé ?
Je vois pas tellement les inconvénients que ça peut avoir (à part un
problème de performance quand on charge plein d’ActiveRecord
différents ?)

Inconvénient: il est considéré que pendant tout le temps de traitement
de la requête, ton objet ne va jamais changer en base. Il me semble que
le cache n’est même pas mis à jour lors d’un appel à update sur l’objet.
Donc ça peut être génant lors de traitement batch ou autre, si tu
souhaitait modifier l’objet en base et aller le rechercher plus tard
dans le traitement (il aura toujours son ancienne valeur avant
modification).