Моделирование пиццы - PullRequest
       20

Моделирование пиццы

2 голосов
/ 05 ноября 2011

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

Мне трудно понять, как подойти к пицце - они сложнее, чем все остальное, так как вы можете выбрать размер, основу, начинки и т. Д.

Я хочу иметь классПродукт, который я могу создать для каждого пункта в меню.Затем этому продукту будут предоставлены объекты класса Size и Option.Это позволяет создать пиццу, установить ее размер (например, обычный / большой / xl) и набор начинки (опция).

Мне как-то нужно, чтобы объекты Option знали, каков размер продукта.Я должен сделать это, так как начинка может стоить 5 фунтов стерлингов за обычную пиццу, но такая же стоимость может стоить 7 фунтов за большую пиццу.В идеале, Option не должен быть элементом Size, поскольку доступные параметры остаются одинаковыми для каждого размера - изменяется только цена.

Моя (возможно, неправильная) модель выглядит следующим образом: http://yuml.me/diagram/scruffy/class/%5BPizza%5D-%3E%5BToppings%5D,%20%5BPizza%5D-%3E%5BSize%5D

Есть идеи, как мне этого добиться?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2011

На самом деле, написав программное обеспечение для этого, я обнаружил, что подпункты для представления опций работают лучше всего.По сути, разрешить элементам иметь наборы подпунктов, и тогда эти подпункты могут иметь наборы дополнительных подпунктов и т. Д. Каждый вариант - это просто еще один элемент (у него есть имя и цена), только онсвязанные с другим элементом.Итак, в вашем примере это может выглядеть так:

Pizza (Item)
|--> Size (ItemSet)
|      |--> Large ($15) (Item)
|      |      |--> Toppings (ItemSet)
|      |             |--> Pepperoni ($7) (Item)
|      |             |--> Anchovies ($7) (Item)
|      |--> Regular ($10) (Item)
|             |--> Toppings (ItemSet)
|                    |--> Pepperoni ($4) (Item)
|                    |--> Anchovies ($4) (Item)
|--> Crust (ItemSet)
       |--> Thin (Item)
       |--> Deep-Dish (Item)

Элемент Pizza имеет набор элементов Size, который содержит 2 элемента (большой или обычный), каждый из которых имеет свой собственный набор элементов Toppings, который содержитсписок топпингов для каждого, каждый со своей ценой.Вы можете иметь несколько наборов элементов на элемент (и, скорее всего, они понадобятся).Я показал это с набором элементов коры.Подпункты не должны иметь собственную цену.Обычно ценообразование является аддитивным, поэтому элемент верхнего уровня (пицца) обычно имеет базовую цену, а затем для выбранных субэлементов их цена добавляется к базовой цене по мере их выбора пользователем.

1 голос
/ 05 ноября 2011

Я бы предложил Шаблон декоратора в качестве отправной точки.

Базовый класс Pizza будет иметь свойства и методы для добавления соусов, начинки и т. Д. Декораторы могут изменять размер базовой Pizza.Например, декоратор ExtraLargePizza изменит размер.Каждый декоратор должен выставлять свои функциональные возможности для расчета стоимости пиццы.Это потому, что декоратор знает свой собственный размер.

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