应该如何在数据库中保存不同方法的参数

本文关键字:方法 参数 保存 数据库 | 更新日期: 2023-09-27 18:36:54

我最近开始做一个副项目,用C#制作一个"Magic: The Gathering"风格的纸牌游戏,只是为了我作为程序员的个人发展。

一张卡牌可以是"怪物"或"咒语",我想在特定场景发生时发射某些事件(例如,怪物在被击中时治疗另一只友方怪物;或者当敌人怪物被放在棋盘上时,法术会造成伤害)。

目前,我将所有卡片存储在RDBMS中,其中有"Monster"和"MonsterTrigger"等表。后者拥有 MonsterId、TriggerType 和 MethodName。加载 Monster 时,我检查它是否有任何触发器效果,并将相应的事件处理程序关联到它,然后通过反射调用 MethodName 列中指定的方法。

我的问题是,我应该如何将方法的参数保存在数据库中?方法可以具有不同数量的参数,不同的数据类型等(例如DestroyAllMonsters() vsDrawCards(numOfCards) vs. Heal(monsterId, hp))。我最初的想法是将参数保存为逗号分隔或类似的东西,但这似乎不是好的做法。我的另一个想法是切换到NoSQL DB,但是如果我能帮助它,我真的很想把这个项目的所有内容都保留在RDBMS上。

我非常想听听你的建议。提前感谢!

应该如何在数据库中保存不同方法的参数

我将从

假设您出于任何原因不使用对象和对象继承开始(因为我的第一个想法是建议对象和类似工厂或构建器设计模式的东西来构建卡片),您已经向自己证明了自己的合理性,而不是走这条路。

对于RDBMS,您希望将需要进一步定义的任何内容拆分到其他表中,并与外键链接。 由于方法各不相同,可能有也可能没有参数,我会将它们拆分出来,有一个参数表,并使用连接表将方法与其参数连接起来,并将方法 ID 与卡一起存储。 这使得 MethodName 列与关系数据库结构的匹配程度高于构建关系数据库结构的方式。