Структура заказов в ресторане - PullRequest
0 голосов
/ 15 сентября 2009

Каков наилучший способ структурирования заказов для ресторана (доступны языки php и javascript)? Поскольку существует несколько таблиц (те, на которых вы храните вещи ...), я подумал об использовании объектов в javascript. Но я совершенно новичок в javascript и абсолютно не знаком с ООП, поэтому я не уверен, является ли это лучшим решением, и действительно ли мой дизайн в порядке. Вот что я придумала:

var order = {
    id: 0,
    table: 0,
    number_of_items: 0,
    item: {
        name: "",
        quantity: 0,
        unit_price: 0
    },
    total: 0
};

Ответы [ 9 ]

3 голосов
/ 15 сентября 2009

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

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

2 голосов
/ 15 сентября 2009

Вам не нужен number_of_items, поскольку вы можете получить его из массива элементов, поэтому вы захотите иметь массив элементов.

var order = {
    id: 0,
    table: 0,
    items: []
};

В идеале вы можете захотеть иметь другой класс для элемента и просто поместить их список в массив элементов.

Это будет выглядеть так:

items = [{name: "", quantity: 0, unit_price: 0}, {...}, {...}]

Вы можете получить сумму, пройдя по массиву и выполнив математику.

Если математика не слишком сложна, я предпочитаю не хранить выводимые значения в объекте, но это именно то, что я делаю.

1 голос
/ 15 сентября 2009

Вот один из способов.

function item(name, price)
{
    this.name = name;
    this.price = price;
}

function order(id, table)
{
    this.id = id;
    this.table = table;
    this.items = [];
}

order.prototype.countItems = function()
{
    return this.items.length;
}

order.prototype.getTotal = function()
{
    var total = 0.0;
    for(var i = 0;i < this.items.length; i++)
    {
        total += this.items[i].price;
    }
    return total;
}

var myorder = new order(1234, 12);

myorder.items.push(new item("coke", 1.25));
1 голос
/ 15 сентября 2009

Я думаю, что вы можете покончить с некоторыми избыточными элементами в вашей структуре:

var order = {
    id: 445221,
    table: 42,
    items: [
        {
            name: "Steak",
            quantity: 1,
            unit_price: 15
        },
        {
            name: "Beer",
            quantity: 1,
            unit_price: 3
        }
    ]
};
0 голосов
/ 16 сентября 2009

Я думаю, что идентификация объектов должна проводиться перед любым кодированием (не поддавайтесь желанию кодировать). Некоторые объекты включают (некоторые уже определены):

  • таблица
  • официант
  • пункт (предопределенный список стандартных пунктов меню вместе с возможностью ежедневных специальных и специальных заказов)
  • заказ - группировка товаров - может быть более одного заказа на стол, клиент может иметь несколько официантов и столов, если они переходят от бара к столу, каждый из этих переходов может быть обработан путем оплаты или перевода товаров

Вам также необходим встроенный рабочий процесс (новый заказ выполнен, обновлен, закрыт и оплачен) ...

0 голосов
/ 15 сентября 2009

Это действительно зависит от того, как вы будете писать свою программу. Если вы не будете использовать AJAX, вам не нужна какая-либо структура JavaScript. Я не использую синтаксис, который вы используете (я предпочитаю создавать классы в функциях), но item должен быть множественным и должен быть массивом. Помните об этом, хотя кажется, что хорошо иметь некоторые ОО-вещи, но если это добавляет сложности, этого следует избегать. Хотя мы используем AJAX в наших приложениях, у нас нет представления объектов в Javascript, мы используем только классы PHP, а Javascript работает с полученными данными XML. Только классы, которые есть в JS, являются виджетами.

0 голосов
/ 15 сентября 2009

В дополнение к другим ответам, как насчет специальных направлений подготовки? Вам нужны отдельные блюда из бургеров (бургер со средним раритетом, хорошо приготовленные бургеры) или отдельная таблица с указаниями по приготовлению, привязанными к этому предмету?

Ваш ответ действительно зависит от вашей аудитории. Это для экрана на кухне, для официантки, входящей в заказ, кассира, инспектора здоровья или всего вышеперечисленного?

0 голосов
/ 15 сентября 2009

Существует несколько таблиц, и каждая таблица - в течение курса обслуживания - может иметь несколько заказов.

Я думаю, что основным компонентом / объектом вашей системы будет сама оболочка, состоящая из чего-то вроде:

order_id, таблица, курс (будет минимум один курс), выбранное блюдо и его стоимость, время заказа (это может не показаться важным, но обычно это хорошо d'hotel или менеджер по обслуживанию) и напитки.

0 голосов
/ 15 сентября 2009

Как насчет этого?

 order = {
     id: <unique identifier>,
     table: <table number>,
     items : <array of objects as declared below> 
 }

 item = {
    item_id: <id of the item in the menu>
    instructions : <text>
 }

Примечания:

  • количество элементов = длина массива элементов.
  • Цена за единицу относится к объекту меню.
  • Всего можно рассчитать в любое время.
  • Не забывайте инструкции (готовка, подача)!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...