0

我正在设计一个基于 Linq2SQL 引擎的游戏。

其他对象之间的游戏有用户和 NPC(非游戏角色)。

用户和 NPC 的能力有些不同,但它们也有一些共同的属性,例如生命值或伤害量。

这些活动是通过类似的方法完成的void AttackUser(User attacker, User target)

这里的问题是 NPC 也可以攻击用户和其他 NPC,而用户可以攻击 NPC,所以我将不得不编写很多额外的方法和重载(例如void AttackNpc(User attacker, Npc npc).

我可以通过使用 Linq2SQL 的继承特性来简化这一切,使用 1 个通用表 Creatures 而不是分别使用用户和 NPC。这也将允许我拥有一种通用方法,void Attack (Creature attacker, Creature target)而不是多个版本。

另一方面,Linq2SQL 中的继承似乎大大增加了解决方案的整体复杂性。每次我决定对用户或 NPC 进行更改时,我都需要考虑继承问题。此外,通过 Linq2SQL 中的继承,我对用户和 NPC 的单独表没有那么清晰,因为所有内容都被转储到一个表中。最后,我担心这种组合的 Creatures 表的性能。

在这里决定是否应该使用继承变得很困难,因为如果我选择了一种次优的方法,那么将来切换到另一种方法将非常困难。

我想听听专家对此的意见。

谢谢。

4

1 回答 1

0

每次我决定对用户或 NPC 进行更改时,我都需要考虑继承问题。

是的,但是如果他们有很多共同点,那也很有帮助,因为您不需要进行两次更改。所以我没有使用继承,你需要考虑重复问题。

此外,通过 Linq2SQL 中的继承,我对用户和 NPC 的单独表没有那么清晰,因为所有内容都被转储到一个表中。

好吧,您正在使用 Linq2SQL 对您的数据库设计进行抽象,所以最终“谁在乎”。假设你有一个“类型”字段,view如果你真的需要它,你仍然可以创建一个用户和 NPC。

最后,我担心这种组合的 Creatures 表的性能。

假设您使用的是 sql server,只要您注意正确的索引,在遇到麻烦之前您将需要大量的生物

简而言之,我会去继承

于 2012-05-23T06:51:53.040 回答