Justin,

I would say that you also implement get/setMemento() in the objects that
make up the composition.  When getMemento() is called for your Person
object, that Person object calls getMemento() for each of its member objects
(Address, Name, etc.) and places the result in its own returned Memento
object/struct.  This way, the owning object is responsible for it member
objects. Just to clarify, I put example psuedocode below.


class Person
{
        Name fName;
        Address fAddress;

        ...

        struct getMemento()
        {
                result = StructNew();
                result.name = fName.getMemento();
                result.address = fAddress.getMemento();
                return result;
        }

        void setMemento(struct data)
        {
                fName.setMemento(data.name);
                fAddress.setMemento(data.address);
        }
}

class Name
{
        string fFirstName;
        string fLastName;
        
        ...

        struct getMemento()
        {
                result = StructNew();
                result.firstname = fFirstName;
                result.lastname = fLastName;
                return result;
        }

        void setMemento(struct data)
        {
                fFirstName = data.firstname;
                fLastName = data.lastname;
        }
}

class Address
{
        string fStreet;
        string fCity;
        string fState;

        ...

        struct getMemento()
        {
                result = StructNew();
                result.street = fStreet;
                result.city = fCity;
                result.state = fState;
                return result;
        }

        void setMemento(struct data)
        {
                fStreet = data.street;
                fCity = data.city;
                fState = data.state;
        }
}
        


Paul Kenney
WebMaster, CorporateWarriors.com
916-630-4545


-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf
Of Justin Balog
Sent: Wednesday, November 26, 2003 1:21 PM
To: '[EMAIL PROTECTED]'
Subject: [CFCDev] memento and composition



Howdy,

I am running into a design question.  I have been doing a lot of thinking
about this, and haven't come to any conclusive answer.  I always have issues
with composition because its seems like it adds quite a bit of complexity to
applications, surely it helps with Code reuse, but it goes against my (Keep
It Simple) style of application building.  You start adding complexities,
and things become brittle.  My question is, lets say I have a person.cfc
whose composed of normal instance vars and an address.cfc (wow I have really
beat this example to death).  Looks good to me.  However, I also took Sean's
get/setMemento() concept from his mach-ii sample app (Sean's stuff is good,
and I hate dragging him into my convoluted questions.  I just feel obligated
to cite my sources).  If your object is Flat, meaning its not composed of
other objects, memento is really slick, clean and tidy.  Just set, or get
the instance vars.  But once you introduce composition, its gets a bit
uglier.  Can anyone help ease my fears about composition, possibly an
example of how folks have used the memento concept with composition. I am
guessing its much like Barney suggested to me a while back when I asked
about serialization.   To me it seems like a tradeoff  of flat stability, or
complex reusability.  Hmm.....any thoughts?

Thanks much,

Justin 
----------------------------------------------------------
You are subscribed to cfcdev. To unsubscribe, send an email
to [EMAIL PROTECTED] with the word 'unsubscribe cfcdev' 
in the message of the email.

CFCDev is run by CFCZone (www.cfczone.org) and supported
by Mindtool, Corporation (www.mindtool.com).

An archive of the CFCDev list is available at
www.mail-archive.com/[EMAIL PROTECTED]



----------------------------------------------------------
You are subscribed to cfcdev. To unsubscribe, send an email
to [EMAIL PROTECTED] with the word 'unsubscribe cfcdev'
in the message of the email.

CFCDev is run by CFCZone (www.cfczone.org) and supported
by Mindtool, Corporation (www.mindtool.com).

An archive of the CFCDev list is available at www.mail-archive.com/[EMAIL PROTECTED]

Reply via email to