Является ли хорошей практикой использование доменных объектов в качестве ключей для карт (или методов "get") или лучше просто использовать идентификатор объекта домена?
Проще объяснить на примере. Допустим, у меня есть класс Person, класс Club и класс Membership (который связывает два других). То есть.,
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;
}
Или что-то в этом роде. Теперь я хочу добавить метод getMembership
в Club. Вопрос в том, должен ли этот метод принимать объект Person:
public Membership getMembership(Person person);
или идентификатор лица:
public Membership getMembership(int personId);
Какой самый идиоматичный, какой самый удобный, какой самый подходящий?
Редактировать: Много очень хороших ответов. Я пошел с тем, чтобы не раскрывать идентификатор, потому что экземпляры "Person" (как вы, возможно, поняли, мой настоящий домен не имеет никакого отношения к людям и клубам ...) легко доступны, но сейчас они хранятся внутри HashMap хэшируется на id - но по крайней мере я правильно выставляю его в интерфейсе.