Есть случаи, когда данные, сериализованные или неэтериализированные в теле, например, тело JSON, содержат ссылки на один и тот же объект. Например, тело JSON со списком игроков, и список команд, составленный из этих игроков:Джексон: ссылка на один и тот же объект
{
"players": [
{ "name": "Player 1" },
{ "name": "Player 2" },
{ "name": "Player 3" },
{ "name": "Player 4" },
{ "name": "Player 5" },
{ "name": "Player 6" },
{ "name": "Player 7" },
{ "name": "Player 8" }
],
"teams": [
{
"name": "Team 1",
"players": [
{ "name": "Player 1"},
{ "name": "Player 2"}
]
},
{
"name": "Team 2",
"players": [
{ "name": "Player 3"},
{ "name": "Player 4"}
]
},
{
"name": "Team 3",
"players": [
{ "name": "Player 5"},
{ "name": "Player 6"}
]
},
{
"name": "Team 4",
"players": [
{ "name": "Player 7"},
{ "name": "Player 8"}
]
}
]
}
Как вы можете себе представить Player X относится к тому же объекту, но потенциально мы могли бы в конечном итоге с нежелательный сценарий, где Player X представлено различными объектами.
Я хотел бы знать, что является лучшим и наиболее распространенным подходом к этим сценариям. Я могу придумать несколько способов сделать это:
- Добавить атрибут идентификатора в класс
Player
. Мой дизайн не включает идентификатор, потому что он не нужен. Способы идентификации объекта по его ссылке и если они содержатся в коллекции, по их позиции в ней (если коллекция имеет позиции). Это можно считать плохой практикой, но я сделал это намеренно, и я не планирую менять его, если это необходимо. - Также, имея идентификатор игрока, но вместо сериализации/десериализации команд в качестве списка игроков это будет просто список идентификаторов. Информация, содержащаяся в корпусе JSON, будет потеряна, но мы будем иметь более компактные данные.
- Придерживаясь моего дизайна без ID, как и в предыдущем пункте, я мог бы иметь список позиций (которые на практике фактически были бы идентификатором игрока, поскольку они служат средством идентификации), поэтому число будет ссылаться игроку в первой позиции в списке .
- Изменение контракта и наличие игроков с уникальным именем. Теперь у нас может быть ID, не добавляя в класс новый атрибут. Однако я думаю, что это плохая идея, потому что не обязательно, чтобы все игроки имели разные имена.
Какой был бы лучший подход? Что обычно делается? У вас есть разные предложения?
Я бы напечатать наклейки с именами игроков («Игрок 1» ... «Игрок N») и есть игрок носить их :) – mjn