使用域对象作为键是不是很好的做法?
是将域对象用作映射(或“get”方法)的键是好的做法,还是仅使用域对象的 id 更好?
用一个例子来解释会更简单。假设我有Person类,一个俱乐部类和一个会员类(连接其他两个)。即
public class Person {
private int id; // primary key
private String name;
}
public class Club {
private String name; // primary key
}
public class Membership {
private Person person;
private Club club;
private Date expires;
}
或类似的东西。现在,我想向俱乐部添加一个方法。问题是,此方法是否应采用 Person 对象:getMembership
public Membership getMembership(Person person);
或者,一个人的ID:
public Membership getMembership(int personId);
哪个是最惯用语,哪个最方便,哪个最合适?
编辑:许多非常好的答案。我没有公开ID,因为“Person”(您可能已经意识到,我的真实域与人和俱乐部没有任何关系......)实例很容易获得,但现在它存储在Id上散列的HashMap中 - 但至少我在界面中正确公开了它。