;; Asociamos a un usuario un repositorio
(assoc user :repository mi-db-writer)

;; luego en otro modulo
(defn expire [user] 
  (write (:repository user) 
    (assoc user :status :expired)))

;; Tambien se puede aƱadir a los metadatos del usuario
;; si no se quiere mezclar con los datos de negocio
;; Lo importante es que dos elementos que solo difieren
;; en los metadatos son *iguales*

(def yo-con-repo ^{:repository my-repo} 
  {:name "jneira" :type "user"})
(def yo {:name "jneira" :type "user"})
(assert (= yo yo-con-repo))

;; expire quedaria asi
(defn expire [user] 
  (write (:repository (meta user)) 
    (assoc user :status :expired)))