我有一个行动,基本上添加一个项目到购物车,唯一的方式是通过检查cookie购物车是已知的,这是逻辑流程,请让我知道,如果你看到任何问题…
/order/add/id通过GET调用
操作检查cookie,如果未找到cookie,则创建一个新购物车,将标识符写入cookie,并将该项目添加到数据库中,并与创建的购物车建立关系
如果找到cookie,它将从cookie中获取购物车标识符,获取购物车对象,并将商品与找到的购物车的关系添加到数据库中
所以基本上就像..。
action add(int id){
if(cookie is there)
cart = getcart(cookievalue)
else
cart = makecart()
createcookie(cart.id)
additemtocart(cart.id, id)
return "success";
}
看起来对吗?我真的不能想出另一种有意义的方式。
发布于 2010-03-17 05:53:03
您的逻辑看起来没问题,不过我会考虑是否需要将购物车内容存储在数据库中。除非你有一个很好的理由,否则我很想把它添加到会话中。
我还会研究为购物车对象创建一个自定义模型绑定器,它将传入一个新的购物车实例或从访问者cookie实例化的实例。这样你的控制器看起来就简单多了,例如:
public ActionResult Add(Cart cart, int id)
{
AddItemToCart(cart, id);
return View();
}
此外,在RESTful应用程序中,理想情况下应该使用POST方法添加到购物车中。
发布于 2010-03-17 05:33:15
在我看来没问题。
GET调用
/order/add/id
1)购物车还不是订单,但它只是一个术语。
2)最好使用POST (PUT)来修改数据。
3)在数据库中存储临时购物车时,不要忘了安排一些清理服务运行,以清除旧的废弃购物车。
发布于 2010-03-17 05:46:53
关于(唯一)我能想到的是你是否需要在数据库中存储任何东西。
如果您允许人们在一台计算机上浏览,然后从另一台计算机上结帐,那么当然,您需要将所选项目存储在数据库中。
但是,如果您不允许这样做,那么您可以在cookie中保留所选的项,这样可以节省数据库访问时间。
https://stackoverflow.com/questions/2458278
复制相似问题