[Tutor] Mapping to an equivalent / similar object?
alan.gauld at btinternet.com
Fri May 29 03:27:02 CEST 2009
"Allen Fowler" <allen.fowler at yahoo.com> wrote
> Imagine the relationship between an Ice Cream retail
> store and the several manufactures that supply it's flavors.
> The store's ordering system takes as input a CanonicalFlavor('Vanilla')
> object that needs to be purchased, and must route this to a
> manufacturer's ordering system.
> The choice of which manufacture to use is based on external factors.
> However, each manufacturer's ordering system is different,
> and each expects a radically different variation of a Flavor object.
> (Different ingredients, parameters, etc. )
The difference between objects is measeured by their interfaces
not their data so provided the supplier objects all use the same
operations of a Flavor then its not too bad. You can either create
subclasses of Flavor for each manufacturer that retuirns the requisite
list of attributes (but requires ongoing changes for every new
manufacturer - eek!) or you can write a method of Flavor that takes
a list (or dictionary?) of required attributes and returns the values.
It can also raise exceptions if asked for unsupported attributes,
or return None, in which case the Supplier object provides a
This way you can limit the changes for a new supplier. You might
also be able to data drive the Supplier object to make the required
list of attributes configurable(via a database or file?). Then you
only need subclasses of Supplier for the actual interface types
(EDI, v FTP, v http v email etc).
> How should the mapping between the CanonicalFlavor('Vanilla')
> object and ManufAFlavor('Vanilla') / ManufBFlavor('Vanilla')
> objects be handled.
If the mapping is one to many I don;t think you need to maintain
it - at least not in the objects. Just pass the Flavor object to the
supplier object. Let the supplier query the Flavor for the data it
If the choice of supplier was driven by Flavor characteristics
then the selection method would be in the Flavour and then
you'd need to keep a list of suppliers in the Flavor. But since
the supplier is chosen from external factors the Flavor doesn't
need to know about its supplier. And the supplier only needs
to know about how to query a flavour.
Author of the Learn to Program web site
More information about the Tutor