2015-03-29 20:57 GMT+02:00 Fabrizio R. [email protected]:
[cut]
Riguardo l’appesantimento, non lo vedo tanto un appesantimento. Alla
fine il modello sta mandando un segnale nell’universo ‘ho aggiornato
updated_at su questo record’. Ci sono molti modi per tenere il modello
all’oscuro dei dettagli dell’implementazione.
con una sola callback presente, ok, ma è la direzione che cerco di
evitare.
Per esempio, se in futuro dovrò fare un batch import con degli update
sul
model, non voglio dovermi inventare degli stratagemmi per evitare che le
callback intervengano (post in ml di qualche tempo fa ;-)).
Chiamala convenzione, ma mi sento molto più sicuro quando so che il
layer
ActiveRecord si preoccupa solo della persistenza.
Anche perché la stessa funzionalità la puoi ottenere senza perdere in
pulizia e concisione: nel contesto di update del cart
(CartsController#{create,update} ?), dopo l’update/create posso lanciare
esplicitamente CarrelloExpireCheckWorker.perform_at(15.minutes.from_now,
record.id) o, se voglio proprio esagerare e/o se i contesti di
aggiornamento sono un numero significativo:
class CartValidityChecker
def initialize(cart:)
@cart = cart
end
def perform
CarrelloExpireCheckWorker.perform_at(15.minutes.from_now, @cart.id
http://record.id/)
end
end
e nei contesti di aggiornamento del cart:
CartValidityChecker.new(cart: cart).perform
in modo da aver un accentramento della logica responsabile
dell’aggiornamento del cart.
Tanto per scherzare un pò con l’economia delle cose: nella soluzione
Cart Samatary se in un anno nessuno usa il carrello avrai fatto 365
query a vuoto
in tal caso ripenserei alla sostenibilità del mio e-commerce