Дизайн - альтернатива хранению исполняемого кода в SQL - PullRequest
0 голосов
/ 28 января 2019

Я работаю над небольшой браузерной игрой, и у меня возникла проблема с дизайном, и единственные решения, о которых я могу подумать, плохие.

Это типичное веб-приложение - Angular2 / HTML / JSвнешний интерфейс, сервер Java с базой данных PostgreSQL, контент, размещенный на nginx и Tomcat

Пользователи могут взаимодействовать с различными NPC (неигровыми персонажами), у которых у всех свое поведение.Я обобщил эту логику, NPC хранятся в БД в виде строк конфигурации,

  • ID: 1
  • Имя: Сэм NPC
  • ImgURL: "www.mygame.com / img / npc / sam.png "

При доступе к mygame.com/npc/1 выдается GET в JS для внутреннего API в Java, чтобы получить эту строку из БД и техзначения связаны и отображаются.Хранение их в виде строк конфигурации в БД позволяет мне добавлять новые NPC или редактировать существующие без повторного развертывания сервера или внешнего кода.

Пока что это стандарт.Тем не менее, я хочу, чтобы Сэм был дружелюбным, и посещение его увеличивает деньги игрока.Другой NPC, Стив, должен быть враждебным и убирать деньги или предметы из инвентаря игроков.Боб, NPC, иногда может разблокировать квест для игроков.

Вот где я застрял: каждый NPC с совершенно другим и произвольным поведением означает, что мне нужен исполняемый код для каждого NPC.

Myдва варианта, на мой взгляд, оба являются плохими, но по-разному.

  1. Каждый NPC получает свой собственный класс Java и является сущностью первого класса в логике сервера.Все NPC реализуют метод interact(), а для добавления или изменения NPC требуется принудительное нажатие кода.

  2. Каждый NPC получает новый столбец в БД с исполняемым файлом JS для запуска через сценарийдвижок на Java.Это немного опасно, но и просто хлопотно.Написание JS, который может вызывать функции БД путем взаимодействия с базой кодов Java и последующего сохранения ее в виде строки в базе данных, является хитрым.

В настоящее время я использую вариант 2, но не слишком далекои интересно, есть ли приемлемый способ справиться с чем-то вроде этого, что лучше.

1 Ответ

0 голосов
/ 29 января 2019

Хранение исходного кода в базе данных мало чем отличается от хранения изображений или документов.Однако я верю, что вы ищете какой-нибудь декларативный язык ( DSL ) для описания NPC, а не императивную программу, реализующую его.Самый простой способ - создать расширяемый DSL на основе XML или JSON.В этом случае документ XML может быть сохранен в базе данных как часть данных профиля персонажа.

...