我正在用 Groovy 开发一个游戏,我正在考虑广泛使用闭包来使架构更简洁。
例如,为了实现状态效果(例如中毒),玩家对象将有一个闭包列表来执行每个游戏回合。保存游戏时必须将这些序列化。
在需要序列化的对象中存储闭包通常是个好主意吗?或者我应该选择更传统的架构(例如存储 StatusEffect 对象列表)?
最佳答案
有一个关闭列表来执行每个游戏回合听起来是一个非常好的主意:-)
序列化闭包是完全可能的。从 Groovy 1.8.5 开始,这两种方法变得更容易 dehydrate
和 rehydrate
被添加到闭包中(这样 owner
、 thisObject
和 delegate
可以在序列化之前被剥离)
但是我在使用 native java 序列化来保存数据时遇到了问题。对于在系统之间发送短期数据,它可能很棒(但即使如此,我也会查看 protocol buffers 或 thrift )
考虑一下如果您需要更新游戏会发生什么?如果poisoned
有bug影响,那么每个在他们的保存文件中保存有错误的中毒闭包的用户都会保留该错误,直到它消失。在多人游戏中,人们也有可能操纵他们的游戏存档文件来赋予自己意想不到的或不需要的权力(因为权力本身的功能将存储在文件中)。我可以看到操纵毒药效果因此增加 HP 而不是去除它们可能是有益的 ;-)
简而言之,我想我想说的是我会写出一个字符表,其中包含影响用户、库存、分数等的 ID,然后在读入文件时检查并应用闭包。
关于groovy 中闭包的序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9649073/