. Когда вы рассматриваете свою команду как список игроков, вы проецируете «идею» команды шара ноги на один аспект: вы сокращаете «команду» до людей, которых вы видите на поле. Эта проекция верна только в определенном контексте. В другом контексте это может быть совершенно неправильно. Представьте, что вы хотите стать спонсором команды. Поэтому вам нужно поговорить с менеджерами команды. В этом контексте команда прогнозируется в списке своих менеджеров. И эти два списка обычно не перекрываются очень сильно. Другие контексты - текущие и прежние игроки и т. Д.
Таким образом, проблема с учетом команды в качестве списка ее игроков заключается в том, что ее семантика зависит от контекста и что он не может быть расширен при изменении контекста. Кроме того, трудно выразить, какой контекст вы используете.
Когда вы используете класс только с одним членом (например, IList activePlayers
), вы можете использовать имя участника (и, кроме того, его комментарий), чтобы сделать контекст понятным. Когда есть дополнительные контексты, вы просто добавляете дополнительный член.
В некоторых случаях может быть излишним создание дополнительного класса. Каждое определение класса должно быть загружено через загрузчик классов и будет кэшироваться виртуальной машиной. Это требует производительности и памяти во время выполнения. Когда у вас есть очень специфический контекст, может быть, стоит подумать о футбольной команде как о списке игроков. Но в этом случае вы действительно должны использовать только IList
, а не класс, полученный из него.
Когда у вас очень специфический контекст, все в порядке рассматривать команду как список игроков. Например, внутри метода вполне нормально писать
IList<Player> footballTeam = ...
При использовании F # может даже быть ОК, чтобы создать аббревиатуру типа
type FootballTeam = IList<Player>
. Но когда контекст более широкий или даже неясный, вы не должны этого делать. Это особенно важно, когда вы создаете новый класс, где неясно, в каком контексте он может использоваться в будущем. Предупреждающий знак - это когда вы начинаете добавлять дополнительные атрибуты в свой класс (имя команды, тренера и т. Д.). Это явный признак того, что контекст, в котором будет использоваться класс, не является фиксированным и изменится в будущем. В этом случае вы не можете рассматривать команду как список игроков, но вы должны моделировать список игроков (в настоящее время активных, а не травмированных и т. Д.) В качестве атрибута команды.
использование В спящем режиме, можно сделать
@CollectionOfElements(targetElement = InterestsEnum.class)
@JoinTable(name = "tblInterests", joinColumns = @JoinColumn(name = "personID"))
@Column(name = "interest", nullable = false)
@Enumerated(EnumType.STRING)
Collection<InterestsEnum> interests;
Наборы в JPA относятся к one-many или many-many отношениям, и они могут только содержать другие объекты. Извините, но необходимо было бы обернуть те перечисления в объект. Если бы Вы думаете об этом, Вам были бы нужны своего рода поле ID и внешний ключ, чтобы хранить эту информацию так или иначе. Это - то, если Вы не делаете что-то сумасшедшее как хранилище разделенный запятыми список в Строке (не делайте этого!).