首页 > 代码库 > MVC设计模式在唯品会网站中的应用
MVC设计模式在唯品会网站中的应用
MVC设计模式在唯品会网站中的应用
在刚刚过去的4.19唯品会活动中,我相信有很多人和我一样都参与了这个活动。当今社会,网上购物已经成了人们生活中不可缺少的一部分,今天让我们一起来看下MVC设计模式在唯品会网站中的应用。
我们平时在唯品会网站购物的时候,点击商品页面的加入购物车图标,然后商品就直接加入到购物车列表中,不管用户是否登录。然后我们换了一台设备,发现该网站我们之前在另一台设备上加入购物车的商品不存在。由此可以推断出:购物车列表的内容不是存放在数据库,而是在cookie中。所以购物车功能实现是在客户端实现的。购物车的功能有:展示购物车列表、向购物车列表中添加商品(add)、修改购物车列表中商品的数量、删除列表中的商品。
在展示购物车列表功能中,因为购物车的商品列表是保存在cookie中的,所以获取购物车列表就是从cookie中获取商品列表。首先cookie中保存形式也是key-value的形式,key指的是保存的名称,比如TT_CART,是一个标志而已。value是保存的商品的具体信息,是以字符串的形式保存的,通常将列表的形式转换成json格式的数据,因为json格式的就是一个字符串的形式保存的。cookie属于会话跟踪技术,写入cookie是服务器的response写入的,即服务器给客户端颁发一个名词cookie。所以获取cookie就需要使用request来获取。
service层实现:
// 从cookie中获取购物车列表
private List<CartItem> getItemListByCookie(HttpServletRequest request)
{
String cookiejson = CookieUtils.getCookieValue(request,"TT_CART",true);
//转换成商品列表
if(cookiejson==null)
{
return new ArrrayList<>();
}
//cookie中保存的也是key-value的值;value是字符串,即json格式的数据
List<CartItem>list=JsonUtils.jsonToList(cookiejson,CartItem.class);
return list;
}
获取到商品的列表后,controller层实现展示该列表:
//显示购物车列表
@RequestMapping("/cart")
public String showCart(HttpServletRequest request,Model model)
{
List<CartItem>showCartList=carService.showCartList(request);
Model.addAttribute("cartList",showCartList);
return "cart";
}
在向购物车添加商品时,首先判断购物车列表中是否存在该商品,如果存在则将该商品的数量加1,如果不存在则将商品加入购物车,重新将商品列表写入cookie。在这个功能模块中没有涉及dao层。service层:因为之前显示了购物车列表,所以需要遍历购物车列表,判断购物车中商品的id和加入的商品的id是否一致,如果一致则数量加1,如果不一致则需要从商品信息表中获取该上商品的信息。这里需要调用服务层的根据id获取商品信息的接口,即用httpclient。
在唯品会网站中,商品加入到购物车之后,显示购物车的商品列表,点击结算,然后到了未提交前的订单列表,点击提交订单后,生成此订单,返回订单的订单号,付款金额,订单预计到达时间。这对于唯品会网站是一个十分重要的功能,其移动端和PC端都需要该功能,所以这里将订单系统单独作为一个服务来,留出接口供客户单来调用。controller需要将对象传递给service层,controller接收的参数是一个json格式的字符串,也就是说客户端传递过来的是json格式的字符串。这涉及到了springMVC是如何接收json字符串的,需要用到@RequestBody注解。@ResponseBody注解的原理是response只能响应一个字符串,当我们的返回值是java对象的时候,它有一个默认行为,即利用jackson包将java对象转为字符串响应。这是一个默认自动的行为,不需要人为设置,只要这个注解即可。@RequestBody注解同理:利用这个注解告诉springMVC现在接收的是一个json字符串,需要采取默认行为利用jackson包将json字符串转换为java对象,所以controller层需要一个java对象的pojo。
MVC设计模式在唯品会网站中的应用