如何在DB中保存不同的方法参数?

时间:2016-03-01 21:49:22

标签: c# reflection rdbms

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

卡片可以是"怪物"或者一个" Spell",我想在某个特定场景发生时发射某些事件(例如,一个怪物会在它被击中时治疗另一个友好怪物;或者当一个敌人怪物被放置时,一个法术造成伤害在董事会上。)

目前我将所有卡存储在RDBMS中,其中我有像#34; Monster"和#34; MonsterTrigger"。后者包含MonsterId,TriggerType和MethodName。当加载Monster时,我检查它是否有任何Trigger效果,并将相应的EventHandler关联到它,然后通过Reflection调用MethodName列中指定的方法。

我的问题是,我应该如何保存方法' db中的参数?方法可以有不同数量的参数,不同的数据类型等(例如 DestroyAllMonsters() vs DrawCards(numOfCards) Heal(monsterId,hp) )。我最初的想法是将参数保存为逗号分隔或类似的东西,但这似乎不是好的做法。 我的另一个想法是切换到NoSQL数据库,但如果我能提供帮助,我真的希望将所有内容保存在RDBMS中。

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

1 个答案:

答案 0 :(得分:0)

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

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