Symfony/Doctrine でゲームを作っています。3D モデルを表す「モデル」と、各モデルに適用できるテクスチャのリストである「テクスチャ」の 2 つのテーブルがあります。それらの間には 1 対多の関係があります (1 つのモデルに多くのテクスチャがあります)。
現在、テクスチャとモデル情報が必要な他のエンティティ (モンスター、キャラクター、プロップなど) がたくさんあります。「このモンスターにはこのモデルとこのテクスチャがあります」という関係を設定する必要があります (ただし、モデルとテクスチャはそれ自体が関連しているため、ゴブリン テクスチャを持つドラゴン モデルを使用できませんでした。有効なペアである必要があります)。 .)
問題は、->model プロパティと ->texture プロパティの両方を持つことは冗長であると感じていることです。テクスチャ A が実際にモデル B と一致することをデータベース層でチェックすることはありません。
私は当初、->getTexture() しか持たず、a) のような「偽の」モデル ゲッターを作成すると考えていました。
public function getModel()
{
if ( $this->texture ) return $this->texture->getModel();
}
他のアプローチは-
b) Monster エンティティ内に ->getModel() と ->getTexture() の両方を持ち、モデルとテクスチャが一致することを確認する検証ルールを追加します。ここでの欠点は、冗長なデータを効果的に作成していることと、どこにでも追加する検証ルールがたくさんあることです。
c) モデルとテクスチャの間の関係を作成する ModelInstance クラスを追加します。ここでの欠点は、全体的により多くのクエリ/複雑さがあり、Model と Texture の間の単純な関係がなくなり、より複雑なものに置き換えられたことです。また、テクスチャに一意の制約を追加する必要があります。
他の人がこの問題にどのようにアプローチしているかを知りたいです!
ありがとう、ジェームズ