[Seaside] Smalltalk design advice - how to implement generic bi-directional pointers?

C. David Shaffer cdshaffer at acm.org
Fri Dec 21 18:20:50 UTC 2007


itsme213 wrote:
> I don't think I have grasped the "Smalltalk Way" to deal with this and am 
> looking for some design advice ...
>   
I understand your followup to some of the other replies.  Yes, it is 
certainly reasonable to have "bidirectional pointers" for some kinds of 
things (event tire-car...if it makes sense in your problem domain).  I 
understand that you want a turnkey solution to building them.  I don't 
think one exists because I think most developers find that they are 
seldom needed (and if you need them a lot then you're either working way 
outside my problem domain or you need to re-think your data model).

That being said, one answer (I can't say if it a "Smalltalk Way" or just 
something that seems reasonable to try in the absense of macros, DNU 
hacks etc) is to turn your relationships into objects.  So a House 
doesn't hold a collection of rooms.  It holds a RoomHouseAssociation.  
This association makes sure that when a room is added, the room knows 
which association (and therefore which house) owns it.  You can make 
generic connectors of this sort (OneToManyAssociation, 
ManyToManyAssociation) but I don't work in a problem domain where this 
is useful.  If the few cases where relationships deserve first-class 
objects, I create a new type for them.  I believe the domain-specific 
version of this has appeared as a common OO design pattern (but the name 
might not be "Association").  You should track down this design pattern 
because it will undoubtedly give you a nice leg up on the API.

David



More information about the seaside mailing list