2013-05-06 64 views
-3

我想知道下面的类之间的关联可能性之间有什么优点和缺点。我知道这是很普遍的问题,要看具体情况的需要但我一般不知道是哲学问题有什么区别面向对象的关联哲学概念

1)

class Order 
{ 
    IList<OrderPosition> Positions; 
} 

class OrderPosition 
{ 

} 

2)

class Order 
{ 

} 

class OrderPosition 
{ 
    Order Order; 
} 

有甚至是创建双向关联的第三种选择,但这是我猜想的内存浪费。

+4

这完全取决于你的情况。这不是一个讨论网站,请参阅常见问题解答:http://stackoverflow.com/faq#dontask – Paddy 2013-05-06 12:44:36

+0

并不总是 - 在特定情况下Order - OrderPosition两种情况对我来说都是平等的我看不出为什么我应该使用一个在另一个 – user1121956 2013-05-06 12:48:49

回答

1

这是不一样的。

1)意味着Order可以有几个OrderPositions,并没有避免的OrderPosition可以在多个Orders被发现。 2)意味着OrderPosition只能包含在一个Order中。

还有其他的影响,如果我们谈论"composition"/"aggregation"(OOP)

1

假设有一些外部因素阻止位置在多个Order或在(1)中的相同Order中多次出现(因为(2)中不会发生)(根据polkduran's answer)。 ..

它完全取决于情况 - 问问自己哪些操作最常执行,这将指向所需的设计。

使用(1)当您需要快速查找给定Order的所有位置时。

使用(2)当您需要快速找到给定位置的Order时。

在许多现实世界中,使用这两种方法绝对不会浪费内存,因为您希望能够快速找到给定位置的给定OrderOrder的所有位置。

你可能想改变(1)以某种树或散列结构的,所以你能找到的特定位置的给定Order不是通过为Order所有位置搜索(如果这使得快在你的设计的背景下感觉)。