[elephant-devel] recreate-instance-using-class

Alain Picard Alain.Picard at memetrics.com
Tue Jan 8 22:13:42 UTC 2008


"Robert L. Read" <read at robertlread.net> writes:

> The contract is that make-instance should only be called once for a
> given object?

FWIW, I wrote a CLOS->SQL layer a few years ago, and I do agreed
with this assessment (that MAKE-INSTANCE should only get called once),
so my protocol ended up with these two extra methods:

(defgeneric customize-persistent-instance (instance &rest initargs &key &allow-other-keys)
  (:documentation "Used to customize an instance when it is created.  This takes
                   the place of the normal initialize-instance :after method.
                   This will be called both when the objects is being created
                   for the first time and being re-selected.
                   Subclasses should define :after methods as required.")
  (:method (instance &rest initargs &key &allow-other-keys) t))


(defgeneric customize-new-persistent-instance (instance &rest initargs &key &allow-other-keys)
  (:documentation "Used to customize an instance when it is newly
                   created by the application.  The object HAS
                   been commited to the database.")
  (:method (instance &rest initargs &key &allow-other-keys) t))


In my mind, when you get an instance via a SELECT, you're not
calling MAKE-INSTANCE, you're doing a hash table lookup to
find an object stored persistently in some imaginary infinitely
large lisp image.

YMMV, of course.

                                --ap



More information about the elephant-devel mailing list