Является ли хорошей практикой использование объектов домена в качестве ключей для карт (или методов "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);
Какой самый идиоматический, что наиболее удобно, наиболее подходит?
Изменить: Много очень хороших ответов. Я пошел, не раскрывая идентификатор, потому что "Личность" (как вы, возможно, поняли, мой реальный домен не имеет ничего общего с людьми и клубами...) экземпляры легко доступны, но пока они внутренне хранятся в HashMap hashed на id - но, по крайней мере, я разоблачаю его правильно в интерфейсе.