Memoizing adiados

Suponha que temos as seguintes rotas em um aplicativo front-end:

/addresses
/checkout

Quando um usuário visita / endereços, obtemos seus endereços. Quando eles visitam / finalizam a compra, nós baixamos seus endereços, seu carrinho e seus métodos de pagamento. Os endereços são necessários e obtidos em ambas as páginas.

Este é um bom padrão para garantir que os endereços sejam buscados apenas uma vez:

class User extends Backbone.Model
addresses
: ->
unless @dfdAddresses
addresses
= new AddressesCollection
@dfdAddresses = addresses.fetch()

@dfdAddresses

Então, nos controladores:

# For /addresses
user
.addresses().then (addresses) =>
@render()

# For /checkout
$
.when(
cart
.fetch(),
user
.addresses(),
user
.paymentMethods()
).then =>
@render()

Como o adiado é memorizado, os endereços são buscados apenas uma vez. Isso salva uma solicitação quando, por exemplo, a página de checkout pode direcionar o usuário para / address para alterar seu endereço de entrega.