教義の「名前」プロパティ2
-
27-09-2019 - |
質問
さまざまな装飾(または印刷)オプションを持つことができる製品を備えたシステムがあるとします。
ほとんどの製品には、同様の範囲の印刷オプション名がありますが、単一の製品にはユニークなものもあります。
たとえば、3つの異なる装飾オプションを持つことができるキャップを持つことができます。
- ブランドなし
- 1つのカラープリント
- 刺繍
私の目標は、管理者ユーザーが作成した装飾オプション名を最小限に抑えようとすることです。つまり、「1カラープリント」と呼ばれる装飾オプションが必要であり、次に「One Color Print」と呼ばれる別の装飾オプションが必要ありません。
したがって、私の計画はUIで、既存の装飾オプション名をドロップダウンするだけでなく、新しいもの(エッジケース用)を追加するオプションを提供することです。
ただし、各装飾オプションには、セットアップコスト、生産時間など、製品によって異なるなど、他のさまざまなデータがあります。
たとえば、HAT1とHAT2には刺繍装飾オプションがありますが、HAT1のセットアップコストは49ドルで、HAT2のセットアップコストはわずか35ドルです。
それで、私の質問は、私のエンティティを構成する最良の方法は何ですか?製品、装飾、装飾の3つのエンティティが必要ですか?または、製品と装飾の2つのエンティティだけですか?
さらに理解するために私のコードの例をご覧ください:
解決
私は3つのエンティティアプローチを使用しますが、セマンティクスのいくつかの小さな違い、製品、装飾、および製品硬化。それは本質的に多くの多くの参加テーブルの背後にあるアイデアですが、参加を独自のオブジェクトとして扱います。ここでは、追加の情報を保存できます。
製品と装飾は独自のエンティティであり、特定の製品と特定の装飾との関係に関する情報は、製品療法で管理されています。これを2つのオネコマニー関係を使用して達成できます。
<?php
class Product
{
/** @OneToMany(targetEntity="ProductDecoration", mappedBy="product") */
private $productDecorations;
}
class Decoration
{
/** @Column(type="string") */
private $name;
/** @OneToMany(targetEntity="ProductDecoration", mappedBy="decoration") */
private $productDecorations;
}
class ProductDecorations
{
/** @ManyToOne(targetEntity="Product", inversedBy="productDecorations") */
private $product;
/** @ManyToOne(targetEntity="Decoration", inversedBy="productDecorations") */
private $decoration;
/** @Column(type="integer") */
private $setupCost;
/** @Column(type="integer") */
private $productionTime
}
2つのエンティティアプローチを使用することをお勧めする唯一の方法は、装飾エンティティの「名前」列以上を必要としないことを予想できない場合、潜在的なデータベースの正規化の問題に悩まされないことです。