Сериализация замыканий в Groovy - PullRequest
5 голосов
/ 10 марта 2012

Я занимаюсь разработкой игры в Groovy и собираюсь широко использовать замыкания, чтобы сделать архитектуру более чистой.Например, для реализованных эффектов статуса (таких как отравление) объект Player будет иметь список замыканий для выполнения каждого игрового хода.Они должны быть сериализованы при сохранении игры.

Как правило, рекомендуется хранить замыкания в объектах, которые нуждаются в сериализации?Или я должен выбрать более традиционную архитектуру (например, хранение списка StatusEffect объектов)?

1 Ответ

4 голосов
/ 11 марта 2012

Наличие списка замыканий для выполнения каждого игрового хода звучит как очень хорошая идея: -)

Сериализация замыканий вполне возможна.Начиная с Groovy 1.8.5 это стало проще, так как два метода dehydrate и rehydrate были добавлены в замыкания (так что owner, thisObject иdelegate можно удалить перед сериализацией)

Но у меня есть проблемы с нативной сериализацией Java для сохранения данных.Для отправки короткоживущих данных между системами это может быть хорошо (но даже тогда я бы посмотрел на буфер протокола или thrift )

Подумайте, что произойдет, если вам нужнообновить вашу игру?Если в аффекте poisoned есть ошибка, то каждый пользователь, который сохранил с отравленным закрытием с ошибкой в ​​своем файле сохранения, сохранит эту ошибку, пока она не исчезнет.В многопользовательской игре люди также могут манипулировать своими сохраненными игровыми файлами, чтобы получить неожиданные или нежелательные полномочия (поскольку функциональность самих полномочий будет храниться в файле).Я мог видеть, что манипулирование отравляющим эффектом, так что он добавляет HP вместо того, чтобы удалять их, может быть полезным; -)

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

...