0

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 テーブルのパフォーマンスについて懸念しています。

ここで継承を使用すべきかどうかを判断するのは難しくなります。最適ではないアプローチを選択すると、将来別のアプローチに切り替えるのが非常に難しくなるためです。

これについて専門家の意見を聞きたいです。

ありがとう。

4

1 に答える 1

0

ユーザーまたは NPC に変更を加えることを決定するたびに、継承の問題を考慮する必要があります。

はい。ただし、共通点が多い場合は、変更を 2 回行う必要がないため、これも役立ちます。したがって、継承を使用していない場合は、重複の問題を考慮する必要があります。

また、Linq2SQL の継承では、すべてが 1 つのテーブルにダンプされるため、ユーザーと NPC の個別のテーブルが明確にわかりません。

まあ、Linq2SQL を使用してデータベース設計から抽象化しているので、最終的には「誰が気にしますか」。「タイプ」フィールドがあると仮定すると、view本当に必要な場合はユーザーと NPC を作成できます。

そして最後に、このような結合された Creatures テーブルのパフォーマンスについて懸念しています。

SQLサーバーを使用していると仮定すると、適切なインデックス作成に注意を払っている限り、問題が発生する前に非常に多くの生き物が必要になります.

要するに、私は継承に行きます

于 2012-05-23T06:51:53.040 に答える