.net LINQ到SQL继承的优缺点

.net LINQ到SQL继承的优缺点,.net,database,linq-to-sql,inheritance,.net,Database,Linq To Sql,Inheritance,我正在设计一个基于Linq2SQL引擎的游戏 游戏中的其他对象包括用户和NPC(非玩家角色) 用户和NPC的能力有些不同,但它们也有一些共同的属性,比如生命值或伤害 这些活动通过类似于void AttackUser(用户攻击者、用户目标)的方法完成 这里的问题是,NPC还可以攻击用户和其他NPC,用户也可以攻击NPC,因此我必须编写许多附加方法和重载(例如,void AttackNpc(User-attack,NPC-NPC)) 我可以通过使用Linq2SQL的继承功能来简化这一切,使用1个通用

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

游戏中的其他对象包括用户和NPC(非玩家角色)

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

这些活动通过类似于
void AttackUser(用户攻击者、用户目标)
的方法完成

这里的问题是,NPC还可以攻击用户和其他NPC,用户也可以攻击NPC,因此我必须编写许多附加方法和重载(例如,
void AttackNpc(User-attack,NPC-NPC)

我可以通过使用Linq2SQL的继承功能来简化这一切,使用1个通用表生物而不是用户和NPC。这也将允许我使用一个通用方法,
无效攻击(生物攻击者,生物目标)
,而不是多个版本

另一方面,LIQ2SQL中的继承似乎大大增加了解决方案的整体复杂度。每次我决定对用户或NPC进行更改时,我将需要考虑继承问题。此外,在LIQ2SQL中继承,对于用户和NPC的独立表没有清晰性,因为所有的东西都被丢弃。一张桌子。最后,我关心的是这种组合生物桌子的性能

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

我想听听专家对此的意见

谢谢

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

是的,但是如果它们在CAMMN中有很多,这也是有用的,因为你不需要两次做改变。所以,你不使用继承,你需要考虑复制问题。

另外,对于Linq2SQL中的继承,我没有那么清晰的定义 用户和NPC的单独表格,因为所有内容都被转储 坐在一张桌子上

好的,您正在使用Linq2SQL从数据库设计中抽象出来,因此最终“谁在乎”了。假设您有一个“类型”字段,您仍然可以创建一个用户和NPC
视图,如果您真的需要它的话

最后,我关心的是这种组合的性能 生物表

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

简言之,我会选择继承