Нелинейный анализ данных в неизменяемые объекты - PullRequest
2 голосов
/ 03 ноября 2011

Мы преобразуем входящие данные (в формате JSON, но это может быть XML или что-то еще) в неизменяемые объекты Java, используя самый простой метод:

// pseudocode

Npc[] npcs;
for (jsonNPC : jsonNPCs) {

   Quest[] quests;
   for (jsonQuest : jsonNPC.quests) {
      quests.add(new Quest(jsonQuest.get(foo), jsonQuest.get(bar), ...));
   }

   npcs.add(new Npc(jsonNPC.get(name), quests, ...));

}

Это отлично работает, но становится все сложнее. Теперь мы хотим, чтобы квесты ссылались на другие Quest экземпляры как на «обязательные квесты».

Проблема в том, что реферальный квест может быть проанализирован только после создания реферального квеста (входные данные не упорядочены и не могут быть, поскольку между NPC могут быть двунаправленные ссылки). Это означает, что мы не можем прикрепить его во время строительства. Но поскольку Quest является неизменным, мы должны.

Как обычно решается такая проблема?

(Примечание: циркулярных ссылок нет. Думаю, это должно помочь)

1 Ответ

1 голос
/ 03 ноября 2011

Если обязательные квесты всегда помещаются в строку json перед квестами, которые в них нуждаются, вы можете просто добавить questID и поле prerequisiteQuestID и сохранить все проанализированные квесты, упорядоченные по их идентификаторам. Если задан prerequisiteQuestID, вы можете выбрать квест из списка.

Если квесты не заказаны, их нужно временно хранить. Разработайте изменяемый класс, который содержит данные, заполните их и, в конце концов, создайте реальные объекты квестов для всех этих квестов и добавьте их в определенный список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...