свойство 'name' в Учении 2 - PullRequest
       25

свойство 'name' в Учении 2

2 голосов
/ 01 ноября 2010

Допустим, у меня есть система с продуктами, которые могут иметь различные варианты оформления (или печати).

Большинство продуктов имеют аналогичный диапазон названий параметров печати, но некоторые могут быть уникальными для одного продукта.

Например, у меня может быть кепка, которая может иметь три различных варианта оформления:

  1. Без маркировки
  2. Один цветной принт
  3. Вышивка

Моя цель состоит в том, чтобы минимизировать имена вариантов оформления, созданные пользователями-администраторами, чтобы они всегда были одинаковыми.То есть я не хочу, чтобы некоторые параметры оформления назывались «1-цветная печать», а затем еще один - «Одноцветная печать».

Так что мой план в пользовательском интерфейсе состоит в том, чтобы иметь выпадающий список существующих вариантов оформления.имена, но также дают им возможность добавить новый (для крайних случаев).

Однако у каждого варианта оформления есть различные другие данные, такие как стоимость установки, время изготовления и т. д., которые варьируются в зависимости отproduct.

Например, у Hat1 и Hat2 может быть вариант декорирования вышивки, но стоимость установки Hat1 составляет 49 долларов, а стоимость установки Hat2 всего 35 долларов.

Итак, мои вопросы:лучший способ структурировать мои объекты?Должен ли я иметь три объекта: Product, DecorationOption и DecorationOptionName?Или только две сущности: Product и DecorationOption?

Пожалуйста, ознакомьтесь с примерами моего кода для более глубокого понимания:

  1. Опция трех сущностей
  2. Два варианта лица

1 Ответ

1 голос
/ 02 ноября 2010

Я бы использовал трехэлементный подход с некоторыми незначительными различиями в семантике: Product, Украшение и ProductDecoration.По сути, это идея таблицы соединений «многие ко многим», но вы рассматриваете объединение как его собственный объект, где вы можете хранить дополнительную информацию.

Продукты и украшения являются собственными отдельными объектами, а информация о взаимосвязи между любым конкретным продуктом и любым конкретным украшением управляется в ProductDecoration.Вы можете достичь этого, используя два отношения OneToMany.

<?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
}

Единственный способ, который я бы рекомендовал использовать подход двух сущностей, - это если вы можете ожидать, что вам никогда не понадобится больше, чем столбец «имя» для сущности Украшения, иВас не беспокоят потенциальные проблемы с нормализацией базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...