如果您的A类是B类和C类的聚合,那么A
会更好我假设这取决于性能要求和其他要求,但我只是在寻找任何一般指导方针或想法。
答案 0 :(得分:3)
在内存中运行的典型程序中,对象几乎总是通过引用存储为指针,因此您要存储B和C的ID,只是您自己不处理细节,语言隐藏它们你。
加载和存储“整个对象”是一个值得怀疑的概念。我知道你正在尝试独立于语言,但是真正帮助我“获得”OO的第一件事就是几乎每个对象都应该拥有自己的生命周期。
如果你有对象A“包含”对象B,并且你将对象B的引用传递给对象C,那么对象A必须知道关于对象C的东西,这完全不行。释放对象B的生命周期,使对象A不知道对象C是使OO工作的核心概念之一。
因此,如果你的意思是存储整个对象,那么不 - 永远不要那样做。
数据库和其他存储也是如此。即使一个对象负责销毁另一个对象,它也很少包含其他对象的数据。
并且(虽然我认为你的意思是说“拉对象B和C”,而不是“方法”),但是能够从另一个传递对象的概念也非常有用,并且它通常没有任何问题。一个警告:
请记住,对象无法控制外部发生的事情。它可以传递,以半随机顺序调用的方法等。因此,保持对象尽可能安全是有帮助的。如果以错误的顺序调用某些内容,或者传入了无效的变量,或者您发现某种程度上您已进入无效状态,请提前失败并使LOUD失败,以便制作错误的程序员调用它。
您还希望尽可能地使其陷入非法状态 - 这意味着保持您的对象小而简单,尽可能使变量最终,并尽量不要让参数调用顺序过多的地方。< / p>
答案 1 :(得分:2)
我倾向于加载和存储整个对象(及其子对象)作为我的默认方法。
有时这会导致加载时间过长,内存占用大,或两者兼而有之。然后,您需要确定是否实际使用了所有已加载的对象,或者是否创建了多个对象并且从未访问过。
如果使用了所有对象,则需要更有创意的方法来加载子集,处理它们,处理它们,然后加载下一个子集以使所有内容适合内存 - 或者只是购买更多内存并使其可用于你的应用。
如果不使用许多对象,最好的方法是在需要时懒洋洋地加载子对象。
答案 2 :(得分:1)
这取决于具体情况。如果对象留在内存中,那么让A包含B和C就更容易(也更容易)。我发现如果需要持久保存对象,它会使A更容易,更有效地存储ID B和C.(如果您需要直接在A但不是B和C中的数据,则不必将B和C从数据库,文件等中拉出来。)
答案 3 :(得分:1)
取决于,
如果B和C很重并且需要加载和构建,那么推迟加载它们可能是值得的,直到你确定需要它们为止(Lazy Initialize)。
如果它们简单轻巧,你可能只想构建它们,你就得到了它们。