分别建模确定性和非确定性数据

时间:2010-05-17 13:19:22

标签: entity-framework

我正在为游戏项目使用Microsoft ADO.NET实体框架。根据SO上其他海报的建议,我正在考虑分别对确定性和非确定性数据进行建模。这个想法来自对多人游戏的讨论,但它似乎也适用于单人游戏场景。

确定性(在游戏过程中不会改变的事情)

  • 属性(力量,敏捷等) 和他们的描述

  • 技能及其描述和 要求

  • 种族,派系,装备等

  • 基本属性/技能/设备 怪物的装载

不确定性(在游戏过程中会发生很大变化的事情)

  • Beings当前的属性骑士(可能的药水= +10力量),当前的生命值和法力值等

  • 玩家库存,现金,经验,等级

  • 玩家任务状态

  • Player FactionRelationships

......等等。

我的确定性模型将作为一组常量。我的非确定性模型将提供我的即时可操作数据,并将被序列化为存档游戏文件以维持游戏会话之间的游戏状态。数据存储将是嵌入式SQL Compact数据库。

所以我可能想在我的属性表(确定性模型)和我的BeingAttributeModifiers表(非确定性模型)之间创建关系,但是如何在模型之间设置它?

 Det model/db       Nondet model/db
 ____________       ________________________
|Attributes  |     |PlayerAttributeModifiers|
|------------|     |------------------------|
|Id          |     |Id                      |
|Name        |     |AttributeId             |
|Description |     |SourceId                |
 ------------      |Value                   |
                    ------------------------

我应该使用两个单独的模型(edmx),它们与包含确定性类型和非确定性类型表的单个数据库进行交易吗?或者我应该/可以在一个模型中使用两个单独的数据库吗?或者两个模型各有自己的数据库?

使用不同的模型/ dbs,这似乎会变得非常复杂,我最终将与EF进行大量战斗,滚动我自己的事务代码,并且通常会失去框架的许多优点。

我知道这些都是含糊不清的问题,我只是在寻求进行健全检查,然后再继续前进。

2 个答案:

答案 0 :(得分:0)

以我的拙见,试图将所有有用的数据放入两张表中是一种痛苦的方法。

过去对我来说最成功的方式是每种类型的“东西”都有一个单独的表格。例如。有一个武器表,其中包含有关武器视觉表现和(视觉和游戏)效果的信息,另一个表格包含所有静态敌方数据(这称为确定性),而另一个表格包含所有动态敌方数据(你称非确定性)。等等。

虽然我有强烈的动机来“多态地”对待所有的敌人,但我没有任何需要或渴望一起处理武器和敌人;功能上没有重叠,所以我将它们的数据分开是有意义的。干扰它们的静态位并将它们的动态位卡在一起只会导致大量无用/不重要/导致错误的数据。敌人引用了武器表,武器引用了VFX和声音表,每个表包含与其他数据截然不同的数据。

我无法权威地与您的数据库模型对话,但如果我要实现这样的事情,我的第一个动机就是保留这些“表”,因为我正在调用它们(因为它们在某些情况下是静态数据编译的和其他人加载到我的程序中)分开,而不是在访问元素时尝试选择适当的字段;说实话,这似乎是浪费精力。很可能各种数据集也会发生变化,如果你想从其他数据集仍在使用的数据集中删除一个字段,事情似乎会变得非常多毛。

答案 1 :(得分:0)

今天最简单的解决方案:一个EDMX,一个数据库,该数据库中的多个表。

是的,您的EDMX可能变得庞大,但希望未来微软将提供更好地管理事物的方法。