OOP关联的哲学概念

本文关键字:哲学 关联 OOP | 更新日期: 2023-09-27 18:12:14

我想知道以下类之间关联的可能性之间的利弊。我知道这是一个非常普遍的问题,取决于具体情况的需要但我想知道,作为一个一般的哲学问题,两者的区别是什么

1)

class Order
{
    IList<OrderPosition> Positions;
}
class OrderPosition
{
}

2)

class Order
{
}
class OrderPosition
{
    Order Order;
}

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

OOP关联的哲学概念

这是不一样的

1)意味着一个Order可以有多个OrderPositions,并且不能避免一个 OrderPosition可以在多个Orders 中找到。

2)表示一个OrderPosition只能包含在一个Order 中。

如果我们谈论"组合"/"聚合"(OOP),还有其他含义

假设有一些外部因素阻止一个位置在多个Order s中出现,或者在(1)中多次出现在同一个Order中(因为这在(2)中不会发生)(根据polkduran的回答)…

这完全取决于具体情况——问问你自己最常执行的操作是什么,这将指向你想要的设计。

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

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

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

您可能希望将(1)更改为某种树或散列结构,这样您就能够找到给定Order特定位置,而不是搜索Order的所有位置(如果这在您的设计上下文中有意义)。