MVC模式在Java Web应用程序中的实例分析

MVC模式在Java Web应用程序中的实例分析

1. 结合六个基本质量属性

先简单回顾一下六个基本质量属性

1)可用性 

可用性与系统故障及其后果相关。当系统不再提供其规范中所说的服务时,就出现了系统故障,系统用户可以观察到此类故障。

可用性是指系统正常运行时间的比例,是通过两次故障之间的时间长度或在系统崩溃情况下能够恢复正常运行的速度来衡量的

2)可修改性

两个关注点:可以修改什么?何时以及谁进行修改。

3)性能

4)安全性

安全性是衡量系统在向合法用户正常提供服务的情况下,阻止非授权使用的能力。

试图突破安全防线的行为被称为“攻击”。攻击有以下三种方式:未经授权试图访问数据或服务 ;未经授权试图修改数据;试图使用系统拒绝向合法用户提供的服务。

5)可测试性 

指通过测试揭示软件缺陷的难易程度。特别地,假设软件中至少有一个错误,软件在下次测试运行时不能正常工作的可能性。 

可测试性的响应度量处理的是测试在发现缺陷方面的效率以及想要达到某个期望的覆盖范围,需要用多长时间进行测试。

6)易用性

关注的是对用户来说完成某个期望任务的难易程度。分为以下几个方面:有效性、错误避免及错误处理、用户自信和满意度、可学习性

通过MVC体现的六大基本质量属性:

1.易用性:根据用户进行添加操作的结果返回不同的处理信息。

2.可修改性:实现了视图与业务逻辑的分离,方便业务内容的修改与扩展。

3.安全性:对用户进行身份验证。

2. 分析具体功能模块的MVC设计实现(例如登录、用户权限等功能模块)。

      登录时,需要输入用户名和密码,密码在传输过程中加密,将模型层得到的数据传送到控制器,再通过分类提供给模型层,同时也实现了可用性、安全性。

      现在的大多数网站都有下次自动登录的功能,即使用户关闭浏览器,下次再访问这个网站时直接就登录了,不需要用户名和密码。Cookie是web服务器存放在客户端的一个文件,主要用来记录用户浏览网站信息的。它主要有两个功能:一个是记录用户信息,下次自动登录的。另一个是记录跟踪统计用户浏览网页的习惯,如:浏览过哪些网站、停留多长时间,进而利用这个可以做访问量统计;在MVC模式下,可以用Cookie实现自动登录。

      而且当系统有多个用户角色时,权限管理无疑提高了系统的可用性、易用性与安全性,使多个用户在权限之内对系统数据进行管理。同时,这样的设计能够灵活的对权限进行设置,体现了系统质量属性的可修改性。

3. 分析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。

posted on 2017-05-01 15:21  大灰狼爱吃兔子  阅读(219)  评论(0编辑  收藏  举报