Nando,

Thank you for that very helpful reply. I think this may be another case of
over complicating things.

-Aaron

On 12/20/06, Nando <[EMAIL PROTECTED]> wrote:

 Aaron,

Hang on! Don't hit the wall on this one. The simple answer is that you
often *don't need* to create the at-first-glance apparent object
relationships in your OO model. For me, i've found that you only need those
relationships when objects need to work together to DO something in your
app. Think more toward working teams when designing your object model, teams
that work together to accomplish a *specific* task. Forget about the
conceptual groupings. If Article and Product don't do something together *at
the same time*, they probably don't need to be related.

My quick hit on your specific case here is that Products and Articles are
only conceptually linked for the user of your app. To do that, you need a
linking table, that's true.

But in the actual flow of what the application does, if products and
articles are edited in separate screens for instance, then you'll be fine
just with a gateway method that uses the appropriate SQL join as your only
linkup between them in your model for the display portion. That can be in
your ProductGateway or your ArticleGateway or you can have different
variations in both.

 In your editing form for products, you can instantiate a Product and use
an ArticleGateway method to get the list of articles for your dropdown. Your
Product DAO handles the SQL for the Product and your linkup table.

Something like that.

Now, if you have a form that you enter the article information and the
author information at the* same time*, and an article can have multiple
authors, then you're in the territory where you need to think about
composition *to accomplish this specific task* ... but it will be pretty
clear to you how to manage that when you get to the code. You might
instantiate an array of Authors in your Article bean and pass that to a
ArticleDAO that was structured in exactly the same way, with an array of
AuthorDAO's composed within it. It works well. Sounds more complicated than
it actually is.

If you add authors first and then add the article in a second step
choosing from a dropdown list of authors, or if you only have room for one
author per article, then you probably don't need to compose those objects
together to get the task done.

Does that help? Don't let the OO books screw your head up here. Speaking
from experience here! A lot of the beginner examples composing engines,
tires and windshield wipers in a car and then aggregated in a parking lot
are misleading because they can give you the impression that that's how you
build your applications. It ain't true, unless you want to drive yourself
nuts.

Yes, you *can* build some very complex models and get your application to
work that way, but it's unnecessary and probably a big waste of your time
and server resources. Keep it as simple as possible. I'd suggest that you
compose your business objects or beans only when they need to work together
in a particular moment to get something done.

I hope that helps ...

Nando


I am converting my spaghetti code application into OOP and have
separated everything out to beans, gateways, DAOs and services. I am
running into a wall trying to figure out how to establish
relationships between objects.

For example, I have the following tables in my database that have
one-to-many and many-to-many relationships:

PRODUCTS (table)
prodid (pk)
title
description
price

ARTICLES (table)
articleid (pk)
authorid (fk)
title
content

PROD_ART (linking table)
prodid (fk)
articleid (fk)

AUTHORS (table)
authorid (pk)
firstname
lastname
bio

How would I define these relationships? Each author has several
articles, each article is related to many products and each product is
related to many articles.

I have installed and created a blog using Model-Glue Unity to see how
Reactor defines these relationships but I cannot translate that over
to my application.

Do I create these relationships in the service layer, gateway, bean, etc?

Thanks for your help,
Aaron Roberson


You are subscribed to cfcdev. To unsubscribe, please follow the
instructions at http://www.cfczone.org/listserv.cfm

CFCDev is supported by:
Katapult Media, Inc.
We are cool code geeks looking for fun projects to rock!
www.katapultmedia.com

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




--

<http://aria-media.com/>
 Aria Media Sagl
CP 234
6934 Bioggio
Switzerland
www.aria-media.com <http://aria-media.com/>



You are subscribed to cfcdev. To unsubscribe, please follow the
instructions at http://www.cfczone.org/listserv.cfm

CFCDev is supported by:
Katapult Media, Inc.
We are cool code geeks looking for fun projects to rock!
www.katapultmedia.com

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



You are subscribed to cfcdev. To unsubscribe, please follow the instructions at 
http://www.cfczone.org/listserv.cfm

CFCDev is supported by:
Katapult Media, Inc.
We are cool code geeks looking for fun projects to rock!
www.katapultmedia.com

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

GIF image

Reply via email to