假设我有两个看起来像这样的类:
public class Human {
private String name;
private String id;
private List<Bike> bikes;
}
public class Bike {
private String model;
private String id;
private String type;
}
现在,把String humanID
放到自行车课上是个好主意吗?我可以用当前的结构做很好的每一个操作,但是如果我得到自行车对象并且想要了解他的主人,我需要迭代人类收集。另一方面,如果我把humanID放在自行车里面,我觉得这将是一种多余的信息,因为关系(agregation)本身告诉谁是所有者。那么有人可以解释哪一个是正确的方法以及为什么?
答案 0 :(得分:4)
完全取决于你的用例。
答案 1 :(得分:1)
首先,让我们思考它在现实生活中的运作方式(对大多数情况而言):
在数据库场景中,我们将有三个表:Human,Bike和HumanBike,这最后一个表,仅用于映射自行车的所有者。
例如:
Human类,将有一个类型为Bike的Set,映射Human实例拥有的所有自行车:
public class Human {
private String name;
private String id;
private Set<Bike> bikes;
}
另一方面,Bike类可以拥有一个Human字段,映射其所有者:
public class Bike {
private String model;
private String id;
private String type;
private Human owner;
}
这样,我们实现了双向关联,可以轻松访问关系的两端。
我们不知道!
这只是一个建议,你的软件可能会有一个完全不同的问题和商务旅馆,所以,我建议你阅读oris Schellekens在这里回答,看看哪种最适合你。
答案 2 :(得分:0)
你可以在自行车内添加一个字段,owner
,指向其中一个人。但你也可以有第三堂课:class HumanHasBike{ Human human; List<Bike> bikes;}