On 07-10-2010 at 01:45, Aurangzeb Agha wrote:
> I have a tiered set of model objects:
> 
> Restaurants have one ore more Menus that have one or more Items.
> 
> I've expressed the Restaurant to Menu relationship as follows:
[snip: bidirectional 1-n relationship]

> I'm curious about a couple of issues:
> 
> 1.  I want to make sure that when a menu is created *for a restaurant*, not
> more than one menu *with the same name *can be created for that restaurant.
>  Is controlling this with the <at>UniqueContraint the right way to go?

Yes, especially at the start. Having the database restrict your data to your
own constraints helps you to keep your code correct: if it isn't the database
will return an error.

The second step (sadly often done as step one) is to make your code behave as
you want it. Wedged between the database constraints and your unit tests,
your code can only be good.

 
> 2.  Do I need to create a Restaurant object *in* the Menu?  What I want to
> ensure is that when a menu is created for a restaurant, I have a way of
> knowing which menu was created for which restaurant.  Should I just have an
> "int restaurantId" parameter in place of the Restaurant object?  If so, how
> do I ensure the constraint in point #1 holds true?

Use a Restaurant object instead of the id (you can always ask the object for
its id if you need to).

As for the first part, that is a matter of preference. Keeping it simple, you
have two options:
1. Menu menu = new Menu(restaurant, "name");
2. Menu menu = restaurant.newMenu("name");

Assuming that a Menu cannot exist on its own (it must be created for a
Restaurant), I'd choose option 2. As a bonus, it's easier to verify the name
is unique within the restaurant.

On the other hand, if a Menu _can_ exist without a Restaurant (not the case
as you marked the restaurant field non-optional), option 1 is better.


Oscar

-- 
   ,-_
  /() ) Oscar Westra van Holthe - Kind      http://www.xs4all.nl/~kindop/
 (__ (
=/  ()  QED - Quite Easily Done

Attachment: signature.asc
Description: Digital signature

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb
_______________________________________________
Stripes-users mailing list
Stripes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/stripes-users

Reply via email to