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.
http://github.com/technoweenie/active_record_context/tree/master

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).

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs