Domain model for an optional many-many relationship

Posted by Greg on Stack Overflow See other posts from Stack Overflow or by Greg
Published on 2010-05-03T19:39:53Z Indexed on 2010/05/03 20:18 UTC
Read the original article Hit count: 275

Let's say I'm modeling phone numbers. I have one entity for PhoneNumber, and one for Person. There's a link table that expresses the link (if any) between the PhoneNumber and Person. The link table also has a field for DisplayOrder.

When accessing my domain model, I have several Use Cases for viewing a Person.

  1. I can look at them without any PhoneNumber information.
  2. I can look at them for a specific PhoneNumber.
  3. I can look at them and all of their current (or past) PhoneNumbers.

I'm trying to model Person, not only for the standard CRUD operations, but for the (un)assignment of PhoneNumbers to a Person. I'm having trouble expressing the relationship between the two, especially with respects to the DisplayOrder property. I can think of several solutions but I'm not sure of which (if any) would be best.

  1. A PhoneNumberPerson class that has a Person and PhoneNumber property (most closely resembles database design)
  2. A PhoneCarryingPerson class that inherits from Person and has a PhoneNumber property.
  3. A PhoneNumber and/or PhoneNumbers property on Person (and vis-a-versa, a Person property on PhoneNumber)

What would be a good way to model this that makes sense from a domain model perspective? How do I avoid misplaced properties (DisplayOrder on Person) or conditionally populated properties?

© Stack Overflow or respective owner

Related posts about object-oriented-design

Related posts about many-to-many