2013-05-06 3 views
-3

Мне интересно, какие плюсы и минусы существуют между возможностями ассоциации между классами. Я знаю, что это очень общий вопрос и зависит от конкретных потребностей конкретных, но мне интересно вообще как философская проблема в чем разницаФилософская концепция ассоциаций ООП

1)

class Order 
{ 
    IList<OrderPosition> Positions; 
} 

class OrderPosition 
{ 

} 

2)

class Order 
{ 

} 

class OrderPosition 
{ 
    Order Order; 
} 

Eсть даже третий вариант создания двунаправленной ассоциации, но это пустая трата памяти, я думаю.

+4

Это абсолютно зависит от вашей ситуации. Это не дискуссионный сайт, см. FAQ: http://stackoverflow.com/faq#dontask – Paddy

+0

Не всегда - в этой конкретной ситуации. Заказ - OrderPosition оба случая равны для меня. Я не вижу, почему я должен использовать один над другим – user1121956

ответ

1

Это не то же самое.

1) означает, что Order может иметь несколько OrderPositions и не избежать, что OrderPosition можно найти в нескольких Orders.

2) означает, что OrderPosition может содержаться только в один Order.

Есть и другие последствия, если мы говорим о "composition"/"aggregation" (ООП)

1

Предполагая, что есть некоторые внешние факторы, которые предотвращают положение от того, в нескольких Order с или появляться несколько раз в том же Order в (1) (потому что это не может произойти в (2)) (в соответствии с polkduran's answer). ..

Это полностью зависит от ситуации - спросите себя, какие операции выполняются наиболее часто, и это укажет на желаемый дизайн.

Используйте (1), когда вам нужно быстро найти все позиции данного Order.

Используйте (2), если вам необходимо быстро найти Order данной позиции.

Использование обоих абсолютно не напрасно тратит память во многих реальных ситуациях, когда вы хотите быстро найти все позиции данного Order и Order данных позиций.

Вы можете изменить (1) к какому-то дерево или хэш-структуры, так что вы в состоянии найти конкретную положение заданного Order быстрее, чем поиск по всем позициям для Order (если это делает смысл в контексте вашего дизайна).

Смежные вопросы