Linq2SQL エンジンをベースにしたゲームを設計しています。
他のオブジェクトの中でもゲームには、ユーザーと NPC (プレイしていないキャラクター) がいます。
ユーザーと NPC の機能は多少異なりますが、ヘルスやダメージの量など、いくつかの共通のプロパティもあります。
アクティビティは、 のようなメソッドを介して行われますvoid AttackUser(User attacker, User target)
。
ここでの問題は、NPC がユーザーや他の NPC を攻撃することもあり、ユーザーが NPC を攻撃することもあるということvoid AttackNpc(User attacker, Npc npc)
です。
Linq2SQL の継承機能を使用して、ユーザーと NPC の代わりに 1 つのユニバーサル テーブル Creatures を使用することで、これらすべてを簡素化できます。void Attack (Creature attacker, Creature target)
これにより、複数のバージョンではなく、1 つのユニバーサル メソッドを持つこともできます。
一方、Linq2SQL の継承は、ソリューションの全体的な複雑さを大幅に増加させるようです。ユーザーまたは NPC に変更を加えることを決定するたびに、継承の問題を考慮する必要があります。また、Linq2SQL の継承では、すべてが 1 つのテーブルにダンプされるため、ユーザーと NPC の個別のテーブルが明確にわかりません。そして最後に、このような結合された Creatures テーブルのパフォーマンスについて懸念しています。
ここで継承を使用すべきかどうかを判断するのは難しくなります。最適ではないアプローチを選択すると、将来別のアプローチに切り替えるのが非常に難しくなるためです。
これについて専門家の意見を聞きたいです。
ありがとう。