хранение корзины покупок, когда ни один пользователь не вошел в систему (сомнение в игровой структуре) - PullRequest
3 голосов
/ 01 сентября 2011

Я просматривал посты о Play! framework и наткнулся на несколько постов, в которых обсуждалось ecommerce. Так как я новичок в обоих, я подумал о выполнении упражнения. Я записал некоторые варианты использования и некоторые требования, как показано ниже. Я хотел бы услышать ваше мнение об этом, надеясь, что это может расширить мою техническую мудрость.

Некоторые требования к корзине для покупок на веб-странице:

1. Пользователь может добавлять товары в корзину даже без входа на сайт.

2. Пользователю необходимо войти в систему после того, как он нажмет на checkout link.

3. Страница деталей товара будет содержать кнопку addtocart, только если этого товара еще нет в корзине.

4.Строка подробностей будет содержать minicartview с указанием наименований товаров в корзине и общей цены.

Я кодировал ShoppingCart, как показано ниже. Его можно получить из базы данных, используя User.

@Entity
class ShoppingCart{
...
   @OneToOne
   public User user;
}

Некоторые возможные сценарии, которые я рассмотрел.

1.Пользователь уже вошел в систему, когда заходит на страницу Itemdetails.

Это кажется простым, я могу получить корзину из БД, используя зарегистрированного пользователя.

User user = User.find("byEmail", Security.connected()).first();
cart = ShoppingCart.find("byUser",user);
...

2.В данный момент пользователь не вошел в систему.

Это то, что беспокоит меня. Как с этим справиться? Как я могу показать minicartview здесь на странице Itemdetails? Где я должен хранить корзину? Кэш нестабилен и ему нельзя доверять. Как еще я должен хранить корзина? Я не могу хранить в БД, пока пользователь не войдет в систему.

Если кто-то может прояснить ситуацию с этим сценарием, он может сильно мне помочь.

Ответы [ 2 ]

2 голосов
/ 02 сентября 2011

У вас есть несколько вариантов.Вы можете

  1. Сохранять элементы корзины покупок в своем сеансе (поскольку это файл cookie, попытайтесь ограничить сумму, которую вы храните).Когда пользователь входит в систему, вы можете объединить элементы корзины сеанса с их зарегистрированными пользовательскими элементами.Как и в случае сайтов, таких как Amazon, имеет смысл попытаться сохранить долгоживущий сеанс на компьютере пользователя, чтобы запомнить идентификатор вошедшего в систему пользователя для дальнейшего использования.

  2. Сохраните данные в базе данных под временным именем пользователя.Это будет похоже на сеанс, но вам потребуется обычное задание, которое очистит таблицу базы данных временных пользователей, если она не будет преобразована в полноценного пользователя.

Лично,Я бы выбрал вариант 1. Он довольно прост в реализации, в cookie нет ничего личного (так как это просто идентификаторы) и он предназначен для кратковременного хранения.

2 голосов
/ 01 сентября 2011

То, как вы моделируете это, может иметь только одну корзину.Вы должны создать корзину для каждой сессии вместо этого.Используйте идентификатор сеанса в качестве первичного ключа для объекта корзины и не связывайтесь с пользователем.

также см. рекомендации по внедрению корзины покупок с использованием playframework

...