我有一个Action基本上将一个项目添加到购物车,购物车的唯一方法是检查cookie,这是逻辑流程,如果您发现任何问题,请告诉我......
通过GET 调用/ order / add / [id]
动作检查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";
}
好像对吗?我不能用另一种有意义的方式。
答案 0 :(得分:1)
对我来说没问题。
通过GET 调用/ order / add / [id]
1)购物车还不是订单,但这只是术语。
2)最好使用POST(PUT)来修改数据。
3)将临时购物车存放在数据库中时,不要忘记安排一些清理服务来清除旧的废弃购物车。
答案 1 :(得分:1)
您的逻辑看起来不错,但我会考虑您是否需要将购物车内容存储在数据库中。除非你有充分的理由我只是想把它添加到会话中。
我还将研究为购物车对象创建自定义模型绑定器,该绑定器将传入新的购物车实例或从访问者cookie实例化的实例。这样你的控制器就会变得更简单,例如:
public ActionResult Add(Cart cart, int id)
{
AddItemToCart(cart, id);
return View();
}
此外,在RESTful应用程序中,理想情况下应使用POST方法添加到购物车中。
答案 2 :(得分:0)
关于(唯一)我能想到的事情是你是否需要在数据库中存储任何东西。
如果您允许人们在一台计算机上浏览然后从另一台计算机上签出,那么您需要将所选项目存储在数据库中。
如果您不允许,那么您可以保留在cookie中选择的项目,从而节省数据库之旅。